JOL介绍

JOL可以查看java对象的内部布局,也可以查看对象占用的空间。

如何使用

Maven引入JOL依赖

<dependencies><!-- https://mvnrepository.com/artifact/org.openjdk.jol/jol-core --><dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-core</artifactId><version>0.16</version></dependency>
</dependencies>

编写代码查看对象结构

public static void main(String[] args) {Object obj = new Object();System.out.println(ClassLayout.parseInstance(obj).toPrintable());byte[] objArr = new byte[100];System.out.println(ClassLayout.parseInstance(objArr).toPrintable());
}

输出结果:

java.lang.Object object internals:
OFF  SZ   TYPE DESCRIPTION               VALUE0   8        (object header: mark)     0x0000000000000001 (non-biasable; age: 0)8   4        (object header: class)    0xf80001e512   4        (object alignment gap)
Instance size: 16 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total[B object internals:
OFF  SZ   TYPE DESCRIPTION               VALUE0   8        (object header: mark)     0x0000000000000001 (non-biasable; age: 0)8   4        (object header: class)    0xf80000f512   4        (array length)            10012   4        (alignment/padding gap)   16 100   byte [B.<elements>             N/A
116   4        (object alignment gap)
Instance size: 120 bytes
Space losses: 4 bytes internal + 4 bytes external = 8 bytes total

结果说明:

  • (object header: mark)就是Java对象头中的Mark Word部分,因为是在64位机器上执行的,所以占用8字节。64位机器上1个字宽等于64bit,也就是4个字节,Java对象头占用2个字宽。
  • (object header: class)存储到对象类型数据的指针。
  • (array length)存储数组的长度。如果对象是数组,对象头会占用3个字宽。(普通对象的对象头占用2个字宽。)

使用jol查看对象内部布局相关推荐

  1. python魔法属性_查看对象内部属性的名称和值,Python“魔法”属性__dict__的使用...

    我们知道,Python中"一切皆对象",Python是一门真正意义上面向对象的编程语言.因此,如果对对象内部存储结构了解不深入,在学习Python的道路上是没有办法进阶的.今天,我 ...

  2. 【Java】MacOS Eclipse使用JOL观察对象布局(详解)

    目录 安装Homebrew 下载JOL源码 安装Maven Eclipse中配置maven Eclipse中创建maven项目 最近想利用Eclipse查看Java对象的布局情况,于是在MAC上下载了 ...

  3. JOL(java object layout): java 对象内存布局

    我们天天都在使用java来new对象,但估计很少有人知道new出来的对象到底长的什么样子?对于普通的java程序员来说,可能从来没有考虑过java中对象的问题,不懂这些也可以写好代码.今天,给大家介绍 ...

  4. easyui form提交和formdata提交记录,查看FormData对象内部的值

    1  easyui form提交 $('form').form('submit',{url:'';onSubmit:'';success:function(data){//这种方法获取到的data是字 ...

  5. JOL(java object layout --java 对象内存布局)

    JOL(java object layout --java 对象内存布局) ⚠⚠⚠本文以java普通对象为切入点,分析java的对象内存布局,数组见文末 maven地址

  6. Java对象内存布局(JOL)

    前言 Java对象的内存布局主要由对象头(Object Header).实例数据(instance data).对齐填充(padding)三部分组成. 对象头:存储对象的基础信息(如锁状态.GC状态. ...

  7. openjdk jol 工具打印 Java 对象内存布局

    1.maven 依赖 <dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-cor ...

  8. JVM成神路对象内存布局、分配过程、从生至死历程、强弱软件引用

    引言 对象实例的角度,阐述一个Java对象从生到死的历程.Java对象在内存中的布局以及对象引用类型. 一.Java对象在内存中的布局 Java源代码中,使用new关键字创建出的对象实例,我们都知道在 ...

  9. (五)JVM成神路之对象内存布局、分配过程、从生至死历程、强弱软虚引用全面剖析

    引言 在上篇文章中曾详细谈到了JVM的内存区域,其中也曾提及了:Java程序运行过程中,绝大部分创建的对象都会被分配在堆空间内.而本篇文章则会站在对象实例的角度,阐述一个Java对象从生到死的历程.J ...

最新文章

  1. 到2020年,智能手机将拥有十项AI功能,有些可能会出乎你意料
  2. 海思全力部署智能城市NB-IoT应用
  3. 时代天使点燃口腔赛道,瑞尔集团离下一只“牙茅”还有多远?
  4. [css] 说说浏览器解析CSS选择器的过程?
  5. Java爬取网页源代码解析
  6. [INet] WebSocket 数据收发的详细过程
  7. 走进WPF之开发类似Visio软件
  8. java英语单词查询,输入一个单词根据字典查询单词意思
  9. c语言是非结构化程序语言_C语言是一种非结构化程序设计语言。
  10. hutool SpringUtil.getBean() NullPointerException
  11. intel服务器cpu芯片线路图,Intel CPU路线图:14nm一直用到2021年
  12. 如何控制工业设计公司的设计效果?
  13. 学mtml还是html5,图解核苷酸替代模型的选择 – MrMTgui 篇
  14. RuntimeError: Expected 4-dimensional input for 4-dimensional weight, but got 3-dimensional input
  15. 解决** WARNING ** : Your ApplicationContext is unlikely to start due to a @ComponentScan of the defau
  16. 使用idm的一些注意事项
  17. android 5.0 按钮颜色,Android 5.0系统默认颜色
  18. 【数据结构】3.十进制转十六进制
  19. 中小学人工智能教育阶段教学模式研究
  20. python破解手机锁屏密码_手机屏幕解锁模式

热门文章

  1. 闪光网-彭亮《可以平凡》
  2. 企业微信为何出现信息发不出去的情况
  3. maven命令的方式
  4. python中的self到底是什么
  5. CTreeCtrl的HitTest用法
  6. 迅雷和FlashGet 地址转换工具_6617.com
  7. 简单易学的机器学习算法——梯度提升决策树GBDT
  8. 批量拿webshell工具【最新】
  9. Fairplay DRM与混淆实现的研究
  10. JDK8 下载与安装教程,超简单版(Windows)