如何获取java对象头信息


首先声明, jvm spec里没有规定java对象的具体存储方式. 所以这里只针对sun jvm来说事.

最近看了一些资料, sun jvm 对象实例在堆中的存储, 首先是java对象头, 普通对象为两个字, 数组为三个字. 一般保存hashcode, 年龄代信息, 监视锁信息, class类型对象的引用等. 然后存放java对象的 成员域.

我试了可以用Unsafe来获取对象大小, 对象成员域的偏移值等信息. 比如在我的win7 x64 jvm7上, 看到new Object()的大小为8字节. 正好是java对象头的大小.

对java对象头里的信息比较感兴趣, 但google了一圈, 没有找到方法可以方便的获取. 请问有人 试过或见到过类似的工具么.

java jvm

乱投硬币打死 11 years, 3 months ago

Your Answer