Object o = new Object()在内存中占了多少字节

编程入门 行业动态 更新时间:2024-10-25 16:22:33

Object o = new Object()在内存中<a href=https://www.elefans.com/category/jswz/34/1770040.html style=占了多少字节"/>

Object o = new Object()在内存中占了多少字节

一、 结论

  • maven
<dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-core</artifactId><version>0.9</version>
</dependency>
  • 测试
public class ObjectLayOutTest {public static void main(String[] args) {Object o = new Object();System.out.println(ClassLayout.parseInstance(o).toPrintable());}
}

二、对象内存布局

  • MarkWord:对象头,8字节。包括了对象的hashCode、对象的分代年龄、锁标志位等。结构如下图所示:
    1.hashcode 2.GC标记 3,锁标记位

  • classPointer:对象指向它的类元素的指针。在不开启对象指针压缩的情况下是8字节。压缩后变为4字节,默认压缩。

通过命令:java -XX:+PrintCommandLineFlags -version 查看classPointer是否开启压缩

InitialHeapSize=266536512 起始堆大小
MaxHeapSize=4264584192 最大堆大小
UseCompressedClassPointers 压缩指针,一般java是64位的操作系统,那么指针的长度即64位,即8字节,开启此命令后,classPointer压缩为4字节
UseCompressedOops 压缩普通对象指针 普通对象占用4字节

padding :用于对象在内存中占用的字节数不能被8整除的情况下,进行补充。

三、Object o = new Object()在内存中占了多少字节

markword 8字节,因为java默认使用了calssPointer压缩,classpointer 4字节,padding 4字节 因此是16字节
如果没开启classpointer默认压缩,markword 8字节,classpointer 8字节,padding 0字节 也是16字节

四、User (int id,String name) User u = new User(1,‘张三’);占用多少字节

markword 8字节,开启classPointer压缩 ,classpointer 4字节,instance data int 4字节,开启普通对象指针压缩 String 4字节 padding 4 一共24字节

更多推荐

Object o = new Object()在内存中占了多少字节

本文发布于:2023-07-28 19:19:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1285479.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:占了   字节   内存   Object

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!