Java对象在内存中的存储布局

对象的内存布局一般分为两种,第一种是普通对象,第二种是数组对象。


观察虚拟机配置命令
java -XX:+PrintCommandLineFlags -version


普通对象

  1. 对象头,在HotSport里被称为markword,长度是8个字节。
  2. ClassPointer指针,-XX:+UseCompressedClassPointers这个参数开启长度为4个字节,不开启为8个字节。
  3. 实例数据(包括成员变量,引用类型:-XX:+UseCompressedOops这个参数开启长度为4个字节,不开启为8个字节)。
  4. padding对齐,是8的倍数。(因为HotSpot要求对象起始地址必须是8字节的整数倍,所以如果对象实例数据部分没有对齐的话,就需要通过对齐填充来补全)。

数组对象

  1. 对象头markword同上。
  2. ClassPointer指针同上。
  3. 数组长度占4个字节。
  4. 数组的数据。
  5. padding对齐同上。

你可能感兴趣的:(学习笔记,jvm,java)