Lilliput:将Java对象头减为64位的里程碑版本发布


在64位Hotspot中,Java对象有一个128位的对象头:一个64位的多用途头("标记 "或 "锁定")字和一个64位的类指针。(正常Java 堆中的对象头是96 位,使用 -XX:-UseCompressedClassPointers 运行时为 128)
典型的平均对象大小为5-6个字,这是相当重要的:其中两个字总是被头占用。
如果有可能减少头的大小,我们可以大大减少内存压力,这直接转化为一个或多个(取决于你关心什么或你的工作负载做什么)。

  • 减少了堆的使用
  • 更高的对象分配率
  • 减少GC活动
  • 更紧密的对象包装-->更好的缓存定位

换句话说,我们可以减少所有Java工作负载的整体CPU和/或内存使用,无论是大型内存数据库还是小型容器化应用。

Lilliput特点:

  • 将对象头缩小到64位。作为一个次要目标,也许可以将其缩减到32位。
  • 使头的布局更加灵活,即允许在构建时(甚至可能在运行时)配置我们如何使用这些bit。

详细点击标题

构建后的里程碑版本:
https://builds.shipilev.net/openjdk-jdk-lilliput/