C/C++教程

Object obj=new Object()占用字节

本文主要是介绍Object obj=new Object()占用字节,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

对象内存中可以分为三块区域:对象头(Header),实例数据(Instance Data)和对齐填充(Padding),以64位操作系统为例(未开启指针压缩的情况)Java对象布局如下图所示:

Object obj=new Object()占用字节

这是网上很多人都会提到的一个问题,那么结合上面的Java内存布局,我们来分析下,以64位操作系统为例,new Object()占用大小分为两种情况:

  • 未开启指针压缩        占用大小为:8(Mark Word)+8(Class Pointer)=16字节
  • 开启了指针压缩(默认是开启的)        开启指针压缩后,Class Pointer会被压缩为4字节,最终大小为:8(Mark Word)+4(Class Pointer)+4(对齐填充)=16字节
<dependency>
            <groupId>org.openjdk.jol</groupId>
            <artifactId>jol-core</artifactId>
            <version>0.10</version>
 </dependency>

 

import org.openjdk.jol.info.ClassLayout;

public class HeapMemory {
    public static void main(String[] args) {
        Object obj = new Object();
        System.out.println(ClassLayout.parseInstance(obj).toPrintable());
    }
}

 

 

 最后的结果是16字节,没有问题,这是因为默认开启了指针压缩,那我们现在把指针压缩关闭之后再去试试。

-XX:+UseCompressedOops  开启指针压缩
-XX:-UseCompressedOops  关闭指针压缩

再次运行,得到如下结果:

 新建一个类,内部只有一个byte属性:

public class MyItem {
    byte i = 0;
}

开启指针压缩,占用16字节:

 

 关闭指针压缩,占用24字节:

 

 

 

 

....

 

https://mp.weixin.qq.com/s/YJsTPd7YDzBqdWsNxnygrA

这篇关于Object obj=new Object()占用字节的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!