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线程的堆栈
利用HSDB - HotSpot Debugger -> Tools -> Find Object by Query 找到Main的class类的對象地址 然后利用Tools中inspector输入0x000000076c195cf8就可以看到地址.
从图可以看出
java的内存布局如图所示:
总结
本文主要是通过HSDB去探测java的对象的内存布局,这里是可以看堆里是非静态的字段和java_mirror这个oop中保存静态字段.