Java对象布局工具

何为对象布局?这个工具能够帮到我们什么呢?


可以不看

或许你经常有这样的疑惑?一个对象究竟占了多少的物理空间呢?这个问题可能对于其他高级语言来说,可能会很简单,因为会直接面临物理内存空间的使用问题,但是,作为Java这种特性的语言,就是将这种问题在jvm里处理了,统一的由jvm去管理分配每个时间片上的物理内存占用或者清退,所以平时大多数时候我们关注不到这些,而我们常常要做的就是new一个新对象,剩下的 交给jvm了,我们埋头CRUD即可,这样从开发效率上来说是有好处的,但是对于我们自身,对于计算机的认识来讲,相比于其他语言,是有些先天不足,所以我们要自己探究我们上面的问题:你new出来的对象到底占了多少物理空间?
好的,假设你明白了new出来的对象占了多少物理空间,那么下次你再去new一个对象的时候,你可能会想到、预估到当前的场景你消耗了多少物理内存资源,且不说IO问题,这时候对于我们自身的编码可能会起到一些小小的影响,虽然有jvm帮我们,但是我们自己也要帮自己,写出更快更节省资源的代码。


OK我的论述就到这里了,下面是介绍

Java对象布局工具

<!--添加这个工具的依赖-->
<dependency>
    <groupId>org.openjdk.jol</groupId>
    <artifactId>jol-core</artifactId>
    <version>0.9</version>
</dependency>

了解一下new出来的对象的内存模型(借用下别人的图)


new出来新对象的内存组成

对象三部分:头 实例数据(对象内容) 补齐部分

现在我们创建一个类Apple 先不给添加任何显示的属性 用对象布局工具打印一下,看看

public class T02 {

    public static void main(String[] args) {

        Apple apple = new Apple();
        //使用对象模型工具将对象以表格字符串的形式打印出来
        ptn(ClassLayout.parseInstance(apple).toPrintable());
    }

    public static void ptn(String msg){
        System.out.println(msg);
        System.out.println("======割=====");
    }
}
/***********结果************/

//开始位置 大小   类型    描述                                                值
 OFFSET  SIZE   TYPE DESCRIPTION                               VALUE
      0     4        (object header)                           01 00 00 00 (00000001 00000000 00000000 00000000) (1)
      4     4        (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)
      8     4        (object header)                           43 c1 00 f8 (01000011 11000001 00000000 11111000) (-134168253)
     12     4        (loss due to the next object alignment)
Instance size: 16 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total
上面结果的截图

好的下面解释一下

上面我们已经把对象模型分为三部分了,头、实例数据(对象内容)、对象补齐
可是大概看看表格 会发现没有只有三行头部数据 和 一行补齐数据
用一共16byte就表述了刚 new 出来的Apple对象
没看到对象内容,为什么呢?是不是因为我们的Apple对象确实没有任何属性的原因呢?
先不解答,我们用这个工具来自己论证这个猜想。

now,给Apple两个字段,int id、String code;
再用对象布局工具打印下,Apple类我就不放了 就是加两个字段 直接看打印结果

 OFFSET  SIZE               TYPE DESCRIPTION                               VALUE
      0     4                    (object header)                           01 00 00 00 (00000001 00000000 00000000 00000000) (1)
      4     4                    (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)
      8     4                    (object header)                           43 c1 00 f8 (01000011 11000001 00000000 11111000) (-134168253)
     12     4                int Apple.id                                  0
     16     4   java.lang.String Apple.code                                null
     20     4                    (loss due to the next object alignment)
Instance size: 24 bytes
上面结果的截图
现在对比第一次的结果我们可以清楚的看到,出现新添加的两个属性,即对象内容各占4个byte
最后补位4byte 共24byte
这个结论印证了上面我们的猜想,也就是说
对象的内容决定了对象的大小,这也是完全符合我们客观世界的规律的。这应该也算OO的一个思想体现吧。

OK 关于这个工具还有很多好玩的 等着我们去探索,噢差点忘了一个比较重要的内容,关于指针压缩的概念,我们以上的测试结果都是基于压缩后的结果 一般HotSpot虚拟机默认开启压缩。

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

推荐阅读更多精彩内容