对象的内存布局
对象的内存布局
hotspot虚拟机要求对象的大小必须是8字节的整数倍,因此需要对其填充部分(貌似是对于64位计算机在读取内存数据到缓冲区的时候是按照八字节八字节读取的)
Markword:内存布局
ClassPointer:jdk 1.8默认开启了指针压缩功能,对于实例对象中指向方法区中的ClassPointer占用大小为4字节。可以使用如下库进行内存布局查看
<dependency>
<groupId>org.openjdk.jol</groupId>
<artifactId>jol-core</artifactId>
<version>0.9</version>
</dependency>
默认情况下为
当关闭该功能时(-XX:-UseCompressedOops):内存布局为
查看虚拟机的启动参数
jinfo pid 查看指定进程的虚拟机信息
-XX:-BytecodeVerificationRemote
-XX:CICompilerCount=12 //并行编译数
-XX:InitialHeapSize=2147483648
-XX:+ManagementServer
-XX:MaxHeapSize=4244635648
-XX:MaxNewSize=1414529024
-XX:MinHeapDeltaBytes=524288
-XX:NewSize=715653120
-XX:OldSize=1431830528
-XX:+UseCompressedClassPointers
-XX:+UseCompressedOops
-XX:+UseFastUnorderedTimeStamps
-XX:+UseParallelGC
-Xms:最小堆内存大小
-Xmx:最大堆内存大小
在生产环境下将这两个值设置为一致,避免每次gc之后进行的内存分配从而提高性能。
后续…