java的对象的内存布局

125 阅读1分钟

java对象布局一般通过jol或者HSDB等工具查看,本文就以HSDB为例:

import java.util.concurrent.locks.LockSupport;

public class Main {
    private String s = "hello world nooField";

    private  Integer integer = new Integer("123");

    private static String string = "hello world static field";

    public static void main(String[] args) throws Exception {
        Main main = new Main();
        LockSupport.park();
    }
}

使用HSDB工具查看Main线程的堆栈

image.png 利用HSDB - HotSpot Debugger -> Tools -> Find Object by Query image.png 找到Main的class类的對象地址 image.png 然后利用Tools中inspector输入0x000000076c195cf8就可以看到地址.

image.png 从图可以看出 java的内存布局如图所示: image.png 总结
本文主要是通过HSDB去探测java的对象的内存布局,这里是可以看堆里是非静态的字段和java_mirror这个oop中保存静态字段.