Java对象在内存的存储布局

以下截图及相关信息,均来源于马士兵公开课中


对象在内存的存储布局

对象在内存的存储布局.jpg
大小: 存储信息
对象头(markword) 8 字节 hashcode 、GC年龄代、锁标识状态
类型指针(class pointer) 4 字节 指向 Class 类对象的引用
实例数据(instance data) 不确定 相关变量信息(int 4字节,long 8字节),引用类型(占用4字节)
数组长度(length,仅数组时存在该属性) 4字节 存储数组长度

锁升级过程对象信息

image.png

查看对象信息

一、引入依赖

<!-- 用于查看对象结构-->
<dependency>
    <groupId>org.openjdk.jol</groupId>
    <artifactId>jol-core</artifactId>
    <version>0.9</version>
</dependency>

二、查看对象信息

synchronized 锁信息在对象头中

(a)测试代码

/**
 * 测试synchronized 锁信息在对象头中
 */
public static void testSynchronized(){
    Object object = new Object();

    System.out.println("========== synchronized 加锁之前 ==========");
    System.out.println(ClassLayout.parseInstance(object).toPrintable());

    synchronized (object){
        System.out.println("========== synchronized 加锁之后 ==========");
        System.out.println(ClassLayout.parseInstance(object).toPrintable());
    }

    System.out.println("========== synchronized 释放锁之后 ==========");
    System.out.println(ClassLayout.parseInstance(object).toPrintable());
}

(b)输出结果:

image.png

hashcode 值在对象头中

(a)测试代码

/**
 * 测试 hashcode值在对象头中
 */
public static void testHashcode(){
    Object object = new Object();
    System.out.println("========== 查看对象的hashcode[未调用对象的hashcode方法,的输出] ==========");
    System.out.println(ClassLayout.parseInstance(object).toPrintable());
    System.out.println("========== 查看对象的hashcode[调用对象的hashcode方法,之后的输出] ==========");
    object.hashCode();
    System.out.println(ClassLayout.parseInstance(object).toPrintable());
}

(b)测试结果

image.png

关于 new Object() 的问题:

1.请解释一下对象的创建过程?

image.png

2.请问DCL要不要加Volatile问题?

DCL(双 if 判断)代码

class SingleDemo3 {
    /**
     * volatile 防止指令重排
     */
    private static volatile SingleDemo3 singleDemo3 = null;

    private SingleDemo3() {}

    public static SingleDemo3 getSingleDemo3() {
        if (singleDemo3 == null) {
            synchronized (SingleDemo3.class) {
                if (singleDemo3 == null) {
                    singleDemo3 = new SingleDemo3();
                }
            }
        }
        return singleDemo3;
    }
}

我们发现创建对象过程中,不是原子操作,因此可能出现错误的情况。

假如指令重排:先建立了关联,后初始化,在未初始化前使用了这个对象就会存在问题

image.png

3.对象在内存中的存储布局?

对象头(markword) + 类型指针(class pointer) + 实例数据(instance data) + 数组长度(length,仅数组时存在该属性)

4.对象头具体包括什么?

synchroized锁标识状态,GC分代年龄,hashcode值(第一次调用才会生成)

5.对象怎么定位?

直接访问、句柄

6.对象怎么分配?

栈上-线程本地-Eden-Old

7.Object o = new Object() 在内存中占用多少字节?

markword(8字节) + classpointer(4字节) + 对齐(4字节) = 16字节

8.为什么hotspot 不使用 c++ 对象来代表 java 对象?

9.Class对象是存储在堆还是方法区?

方法区

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容