java 相对路径_如何查看一个 java 对象的大小

最近一直着迷于缓存行,要想正确理解缓存行以及伪共享就一定要知道Java对象的大小,以及如何分布.

在这里演示了使用JOL 工具来查看一个对象的大小和分布.

JOL (Java Object Layout) is the tiny toolbox to analyze object layout schemes in JVMs. These tools are using Unsafe, JVMTI, and Serviceability Agent (SA) heavily to decoder the actual object layout, footprint, and references. This makes JOL much more accurate than other tools relying on heap dumps, specification assumptions, etc.

该工具官网:

http://openjdk.java.NET/projects/code-tools/jol/

下载地址:

http://central.maven.org/maven2/org/openjdk/jol/jol-cli/

下载jar包后保持如下的相对路径 和你要测试的类在一起.

67b1b53a082defb075cbe1f381e5ec9a.png

写一个对象来查看:

012135d48d97214a00715dd420c2362e.png

例如 上面的这个类在32 bit jvm上应该是 64 字节,正好攒够一个缓存行大小,

9bac1e13d060fb6660792640bef5e54f.png

对象头8 字节 + 8 (value long大小) + 6*8 (填充) = 64 字节

在64bit jvm上 开启指针压缩: (默认开启):

ce8f5c04eb967eebcb8ce8155075bc2a.png

对象头12字节 (但是要对齐8字节 所以对象头总共16字节.)

64bit不开启指针压缩:

45296ce7b1035e4842ff1f3718f5f8e1.png

对象头为完整的16字节.

Java对象分布细节:

  • header
  • double /long 8byte
  • int 4 byte
  • byte 1 byte
  • boolean 1byte
  • Object ref 4 byte
  • Objetc [] arrat 4

同时 如果头有剩余空间会优先填充.

示例代码:

bc77a97fabd4159251f430dd57e78e88.png

有压缩:

34a0870a0d51a80964034a75f75c751d.png

没有压缩:

83b1d93a3d7fd7f6c6e6a9ed5c104cba.png
07ad64727fbc10368ea6738c379288f5.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值