【发布时间】:2019-01-06 15:40:23
【问题描述】:
OpendJDK 有一个Java Object Layout (JOL) 工具,允许估计指定对象的实例实际内存大小。 它可以显示 HotSpot 的对象布局,但在 OpenJ9 中是否相同?
【问题讨论】:
-
不,不幸的是我需要更详细的答案。也许我有时间我会尝试自己分析源代码并为这个问题写一个答案
OpendJDK 有一个Java Object Layout (JOL) 工具,允许估计指定对象的实例实际内存大小。 它可以显示 HotSpot 的对象布局,但在 OpenJ9 中是否相同?
【问题讨论】:
好吧,恕我直言,答案是否定的,至少如果你也计算参考大小,UseCompressedOops 是 HotSpot 特定的。可能 J9 也有,但可能没有。
还有填充的问题,在 HotSpot 中对象是 8 bytes 对齐的(关于继承有更复杂的事情),但我不知道 J9 是否这样做......
【讨论】:
如果您有系统核心(例如通过 -Xdump:system:events=vmstop),您可以使用 jdmpview 的 !objectsizeinfo 命令查看活动对象的大小,包括填充和对齐,例如:
> !objectsizeinfo java/lang/String
Object field size summary
=========================
Class Total size Data size Space used Instances char byte short int long float double boolean object hidden
---------------- ---------- --------- ---------- --------- ---- ---- ----- --- ---- ----- ------ ------- ------ ------
java/lang/String 16 10* 66752 4172 0 2 0 0 0 0 0 0 1 0
Class Total size Data size Space used Instances char byte short int long float double boolean object hidden
Heap summary 66752 41720 66752 4172 0 8344 0 0 0 0 0 0 4172 0
【讨论】: