美文网首页
Java对象解析

Java对象解析

作者: preDatar | 来源:发表于2020-08-07 15:15 被阅读0次

Java普通对象在内存中的构成

一、对象头(markword,64位系统上占用8个字节,共64位,32位系统则32位)

image.png
以上是Java对象处于5种不同状态时,Mark Word中64个位的表现形式,上面每一行代表对象处于某种状态时的样子。如图可以看出,当对象已经计算过identity_hashcode了,它就无法进入偏向锁状态,因为空间不够存放hashcode。另一个方面,当对象已经是偏向锁的状态,就没有足够的空间放入hashcode,因此只能移动到管程monitor中。

对象头包含以下几种属性:

  • lock,锁状态标记,2位

  • biased_lock:对象是否启用偏向锁标记,只占1个二进制位。为1时表示对象启用偏向锁,为0时表示对象没有偏向锁。lock和biased_lock共同表示对象处于什么锁状态。

  • age:4位的Java对象年龄。__由于age只有4位,所以最大值为15,这就是-XX:MaxTenuringThreshold选项最大值为15的原因。GC信息。

  • identity_hashcode:31位的对象标识hashCode,采用延迟加载技术。调用方法System.identityHashCode()计算,并会将结果写到该对象头中。当对象加锁后(偏向、轻量级、重量级),MarkWord的字节没有足够的空间保存 hashCode,因此该值会移动到管程Monitor中。

  • thread:持有偏向锁的线程ID。

  • epoch:偏向锁的时间戳。

  • ptr_to_lock_record:轻量级锁状态下,指向栈中锁记录的指针。

  • ptr_to_heavyweight_monitor:重量级锁状态下,指向对象监视器Monitor的指针。

关于对象头和锁之间的转换,网上大神总结


image.png

2.类指针(classPointer,占用4或8个字节)

-XX:+UseCompressedClassPointers 为4字节 不开启为8字节

3.实例数据

引用类型:-XX:+UseCompressedOops 为4字节 不开启为8字节 Oops Ordinary Object Pointers(string等)

4.Padding对齐,8的倍数

数组对象

1、对象头:markword 8
2、ClassPointer指针同上
3、数组长度:4字节
4、数组数据
5、对齐 8的倍数

实例

private static class P {
                       //8字节 _markword
                       //4字节 _oop指针
       int id;         //4字节
       String name;    //4字节
       int age;        //4字节
       byte b1;        //1字节
       byte b2;        //1字节
       Object o;       //4字节
       byte b3;        //1字节
   }

常用对象(-XX:+UseCompressedClassPointers)
1、new Object(8+4+0+4)
2、new int

常用对象
1、new Object(8+8+0+0)
2、new int

相关文章

  • 对像和类

    Java 对象和类 多态 继承 封装抽象 Java对象和类 类对象实例方法消息解析代码: 11 运行结果: 小狗的...

  • Java对象解析

    Java普通对象在内存中的构成 一、对象头(markword,64位系统上占用8个字节,共64位,32位系统则32...

  • Java基础之SAX解析XML

    1. Java解析XML简介 Java库中提供了两种XML解析器: 像文档对象模型(Document Object...

  • 第八章.处理XML

    一、解析XML groovy简化了java解析XML(点此查看)的痛苦。 首先建立一个XML文件作为解析对象: <...

  • 好好看,好好学

    Java部分 面向对象 java 内存JVM:图文解析 Java内存结构Java虚拟机内存管理——内存空间划分Ja...

  • @SerializedName注解

    在Android中解析Gson解析json数据是很方便快捷的,可以直接将json数据解析成java对象或者集合。G...

  • Java面向对象解析

    概念 面向对象(Object Oriented,简称OO),是一种程序设计思想,是 Java 语言的核心部分。利用...

  • Java容器解析——ArrayList

    Java容器解析——ArrayList Java容器解析——LinkedList Java容器解析——Hashta...

  • Java容器解析——Hashtable

    Java容器解析——ArrayList Java容器解析——LinkedList Java容器解析——Hashta...

  • Java容器解析——LinkedList

    Java容器解析——ArrayList Java容器解析——LinkedList Java容器解析——Hashta...

网友评论

      本文标题:Java对象解析

      本文链接:https://www.haomeiwen.com/subject/ehflhftx.html