对象(1)

x86JVM 观察java对象组成

导入依赖
<dependencies> <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.9</version> </dependency> </dependencies>
main:

import org.openjdk.jol.info.ClassLayout;

public class 对象头 {

    static int a = 1;
    static int[] a1 = {1};
    static boolean[] b = new boolean[2] ;
    static String c = "1";
    static long e = 1;

    public static void main(String[] args) {
            System.out.println(ClassLayout.parseInstance(a).toPrintable());
            System.out.println("===============================");
            System.out.println(ClassLayout.parseInstance(a1).toPrintable());
            System.out.println("===============================");
            System.out.println(ClassLayout.parseInstance(b).toPrintable());
            System.out.println("===============================");
            System.out.println(ClassLayout.parseInstance(c).toPrintable());
            System.out.println("===============================");
            System.out.println(ClassLayout.parseInstance(e).toPrintable());
            System.out.println("===============================");
        System.out.println(System.getProperty("os.arch"));


    }
}


获得打印信息,可以看到对像的构成是由对象头、对象本身的数据和空间损失(因为需要凑够8的倍数)组成,普通对象的对象头长度在x86的JVM里是8字节,数组对象的对象头长度则是12字节。
对象头 包含了堆对象的布局、类型、GC状态、同步状态和标识哈希码的基本信息,它是GC管理的堆对象开头的 公共结构 。(Survivor区使用复制算法,分为From Survivor和To Survivor两个部分,在每次Minor GC/Young GC后仍存活的对象就会被复制到另一个区上,但每复制一次其年龄会+1,满十五次该对象会被移动到Old Gen,十五次是因为对象头有4个bit位来计算年龄,其标识范围为0~15)
对象在synchronized使用中有五种状态,1.无状态。2.偏向锁。3.轻量锁。4.重量锁。5.GC标记。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值