1. Object object = new Object()谈谈你对这句话的理解?
一般而言JDK8按照默认情况下,new一个对象占多少内存空间
位置所在:JVM里堆→新生区→伊甸园区
构成布局:头体?想想我们的HTML报文
2. 对象在堆内存中的存储布局
3. 对象标记Mark Word
对象布局、GC回收和后面的锁升级就是
对象标记MarkWord里面标志位的变化
4. 聊Object obj = new Object()
4.1. JOL
OpenJDK: jol 分析对象在JVM的大小和分布
<dependency>
<groupId>org.openjdk.jol</groupId>
<artifactId>jol-core</artifactId>
<version>0.9</version>
</dependency>
Object o = new Object();
System.out.println( ClassLayout.parseInstance(o).toPrintable());
OFFSET | 偏移量,也就是到这个字段位置所占用的byte数 |
SIZE | 后面类型的字节大小 |
TYPE | 是Class中定义的类型 |
DESCRIPTION | DESCRIPTION是类型的描述 |
VALUE | VALUE是TYPE在内存中的值 |
7.2 GC年龄
GC年龄采用4位bit存储,最大为15,
例如MaxTenuringThreshold参数默认值就是15
-XX:MaxTenuringThreshold=16
7.3 开启压缩说明
java -XX:+PrintCommandLineFlags -version
上述表示开启了类型指针的压缩,以节约空间,假如不加压缩???
-XX:-UseCompressedClassPointers