深入拆解 Java 虚拟机
郑雨迪
Oracle 高级研究员,计算机博士
88749 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
模块四:黑科技 (3讲)
深入拆解 Java 虚拟机
15
15
1.0x
00:00/00:00
登录|注册

Project Lilliput 如何降低 JVM 内存开销?

你好,我是郑雨迪。
在 JVM 中,每个 Java 对象都包含一个对象头,用于存储多种元数据,例如锁信息、哈希码、垃圾回收状态及指向其类的指针等。
这些数据主要是为了维护 JVM 的正常运行,并不包含任何应用程序相关的数据,因此,通常被视作运行 JVM 所需的额外内存开销。
目前,64 位 JVM 的默认对象头大小为 12 字节,其中包括 8 字节的标记字段(mark word)以及 4 字节的压缩类指针。据调研[1],Java 对象在大多数场景下的平均大小约为 32 至 64 字节,其中对象头所占的比例大致在 37.5% 至 18.75% 之间。
这一显著的内存开销使得 JVM 饱受诟病,也因此催生了名为 Project Lilliput 的项目。
Project Lilliput 的理念相对简单,核心在于压缩对象头的大小。
为了说明这一点,我们可以假设 Java 对象的平均大小为 32 字节。根据这个假设,原本 12 字节的对象头若被压缩为 8 字节,便可实现 12.5% 的内存节省;若能够进一步将对象头压缩至 4 字节,内存节省则可达到 25%。
在 Lilliput 的相关介绍中[2]提到,实际生产环境中,通过压缩对象头大小所节省的内存通常在 10% 到 20% 之间。这项技术的应用,不仅能够降低内存占用,还可以提高 JVM 的效率,进而优化 Java 应用程序的性能。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. Project Lilliput aims to reduce JVM memory overhead by compressing object headers, potentially saving 10% to 20% of memory in production environments and optimizing Java application performance. 2. The introduction of compressed class pointers in JDK 24 has allowed for the compression of 64-bit references to 32-bit array indexes, improving JVM efficiency. 3. The new lightweight locking feature in JDK 24 aims to enhance lock efficiency by assuming no conflicts, but it faces challenges related to unlock order and escape analysis complexity. 4. The core task of the new lightweight locking mechanism is to establish a mapping between Java objects and Java threads to determine if the current lock is held by the executing thread. 5. The new heavyweight lock mapping mechanism in JDK 24 utilizes a global concurrent hash table, which introduces additional memory overhead and synchronization requirements, potentially impacting lock efficiency. 6. The query cost for the new heavyweight lock mapping mechanism is h

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入拆解 Java 虚拟机》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)