首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏程序那些事

    终于我用JOL打破了你对java对象的所有想象

    今天,小F给大家介绍一款工具JOL,可以满足大家对java对象的所有想象。 02 JOL简介 JOL的全称是Java Object Layout。是一个用来分析JVM中Object布局的小工具。 JOL可以在代码中使用,也可以独立的以命令行中运行。命令行的我这里就不具体介绍了,今天主要讲解怎么在代码中使用JOL。 使用JOL需要添加maven依赖: <dependency> <groupId>org.openjdk.jol</groupId> <artifactId 04 使用JOL分析String 上面的都不是重点,重点是怎么使用JOL来分成class和Instance信息。 其实java中的对象,除了数组,其他对象的大小应该都是固定的。 07 使用JOL分析引用关系 上面我们使用JOL分析的是class内部的空间使用情况,那么如果有外部引用可不可以分析呢?

    1.3K20发布于 2020-07-07
  • 来自专栏余生大大

    Java的锁机制

    引入jol工具包,它可以把java对象在jvm内存中布局的情况打印出来,看一下对象在jvm中是怎么存在的 <dependency> <groupId>org.openjdk.jol</groupId > <artifactId>jol-core</artifactId> <version>0.15</version> <scope>provided</scope> </dependency > demo代码: package com.example.learningdemo.demo; import org.openjdk.jol.info.ClassLayout; /** * @author

    34030编辑于 2022-11-02
  • 来自专栏软件开发-青出于蓝

    JDK之JVM中Java对象的头部占多少byte

    build 1.8.0_131-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)      我用openJDK的jol 来查看对象的layout,源码如下,直接运行main方法, List-2 package com.mjduan.project.openjdk_jol_example; import org.openjdk.jol.info.ClassLayout 2.2 验证Java数组对象的头部占用byte数 List-3 验证数组的情况 import org.openjdk.jol.info.ClassLayout; import org.openjdk.jol.vm.VM List-4 import org.openjdk.jol.info.ClassLayout; import org.openjdk.jol.vm.VM; /** * @author dmj1161859184 图3 List-4的运行结果 List-5 import org.openjdk.jol.info.ClassLayout; import org.openjdk.jol.vm.VM; /** *

    1.5K50发布于 2019-04-15
  • 来自专栏个人技术笔记

    对象的内存布局解析

    使用JOL工具查看内存布局(验证理论步骤)   JOL工具说明     查看普通java对象的内部布局工具JOL(JAVA OBJECT LAYOUT),使用此工具可以查看new出来的一个java对象的内部布局 -- 查看Java 对象布局、大小工具 --> <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core< 针对TestObject1类产生的对象,利用jol查看64位系统java对象(空对象),默认开启指针压缩,总大小显示16字节,前12字节为对象 额外拓展说明: OFFSET:偏移地址,单位字节 针对TestObject2类产生的对象,利用jol查看64位系统java对象(非空对象),默认开启指针压缩,总大小显示24字节,前12字节为对象       3. 

    82820编辑于 2022-10-30
  • 来自专栏云时代Java开发:原理、实战与优化

    boolean 与boolean数组内存布局-Java快速进阶教程

    设置 为了检查 JVM 中对象的内存布局,我们将广泛使用 Java 对象布局 (JOL)。 因此,我们需要添加jol-core依赖项: <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId 对象尺寸 如果我们要求 JOL 根据对象大小打印虚拟机详细信息: System.out.println(VM.current().details());Copy 启用压缩引用(默认行为)后,我们将看到输出 (OOP) 现在我们知道布尔值是 1 个字节,让我们考虑这个简单的类: class BooleanWrapper { private boolean value; }Copy 如果我们使用 JOL 检查此类的内存布局: System.out.println(ClassLayout.parseClass(BooleanWrapper.class).toPrintable());Copy 然后 JOL

    37900编辑于 2025-04-05
  • 来自专栏索码理

    如何判断一个对象占用多少字节?

    实践出真知 下面来通过openjdk jol 来解读对象占用多少字节。 JOL JOL(Java Object Layout)是用于分析 JVM 中对象布局方案的微型工具箱。 这使得 JOL 比其他依赖堆转储、规范假设等的工具更准确。 示例 创建一个maven项目,引入依赖 <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId /float 4 char/short 2 byte/boolean 1 oops(Ordinary Object Pointers) 4 总结 通过我们上述测试得到的表格,在不依赖openjdk jol

    96010编辑于 2022-09-20
  • Java对象内存布局的那些事

    JOL(Java Object Layout)是一个非常好用的工具,它能显示对象的各个字段在内存中的分布情况。不过,我一开始用的时候,感觉有点复杂,毕竟它需要依赖一些库,而且输出的信息也比较专业。 我记得第一次用JOL的时候,写了一个简单的测试类,然后运行了一下,结果输出了一大堆信息。当时看得一脸懵,不知道该怎么解读。后来慢慢摸索,才发现这些信息其实很直观。 除了JOL,还有一些其他的工具,比如jstat、jmap、VisualVM等。不过这些工具主要用来监控GC和内存使用情况,而不是直接查看对象的内存布局。 所以,如果你想深入了解对象的结构,还是建议使用JOL。 不过,我得说一句,JOL虽然强大,但也不是万能的。有时候它的输出信息可能会让人困惑,尤其是对于刚接触的人来说。 如果你也在学习Java,或者正在做性能优化,那么不妨试试JOL,看看你的对象到底是怎么被分配内存的。说不定,你会发现一些意想不到的优化点。

    10510编辑于 2026-03-28
  • 来自专栏刘君君

    JDK8的CAS实现学习笔记

    顺便介绍个查看对象的属性位置分布的一个小工具:jol 使用Demo: 首先引用jol-core包 <! -- https://mvnrepository.com/artifact/org.openjdk.jol/jol-core --> <dependency> <groupId>org.openjdk.jol </groupId> <artifactId>jol-core</artifactId> <version>0.9</version> </dependency> 然后在项目里简单使用下

    85160发布于 2018-05-21
  • 来自专栏JavaEdge

    面试官竟然不知道Java单例模式双重检验锁一定要加volatile!

    对于 T t = new T(); 其实有如下字节码指令完成 _new 'org/openjdk/jol/T' dup INVOKESPECIAL org/openjdk/jol/T.

    33331发布于 2020-05-27
  • 来自专栏做不甩锅的后端

    多线程基础(五):java对象的MarkWord及synchronized锁升级过程

    因此,我们需要用到一个三方的jar包工具jol来对java对象进行查看。 1.1 导入jol 导入的方式比较简单,我们只需要在pom文件中添加如下内容即可: <! -- 查看内存布局--> <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId > <version>0.10</version> </dependency> 之后就可以使用jol来查看对象的内存布局了。 但是需要注意的是,这里每次输出的都是4个字节,再第一行的内部,jol已经帮我们做了处理。因此现在看起来第一行的最后两位才是我们上表中的锁状态位。 #4 // Method org/openjdk/jol/info/ClassLayout.toPrintable:()Ljava/lang/String;

    1.2K20发布于 2020-09-10
  • 来自专栏ahzoo.cn的博客分享

    私有成员是否会被继承

    但是对于那句话,不同的人有不同的理解; 举个例子: import org.openjdk.jol.info.ClassLayout; import org.junit.Test; import org.openjdk.jol.info.ClassLayout extends Person { public ExtendPerson() {} } ClassLayout需要引入依赖: <dependency> <groupId>org.openjdk.jol </groupId> <artifactId>jol-core</artifactId> <version>0.8</version> </dependency> 从上面的例子中可以看出,父类的私有成员在子类的内存中是出现了的

    1.6K31编辑于 2022-08-01
  • 来自专栏技术趋势

    对象实例化与内存布局(深入)

    相关校验过程 引入jar包 <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.8</version> </dependency> jol-core 常用的三个方法 ClassLayout.parseInstance(object).toPrintable( \jol-core\0.8\jol-core-0.8.jar" com.lock.PartialLock 未锁com.lock.PartialLock object internals: OFFSET \jol-core\0.8\jol-core-0.8.jar" com.lock.GentlyLock 偏向锁com.lock.GentlyLock object internals: OFFSET \jol-core\0.8\jol-core-0.8.jar" com.lock.WeightLock com.lock.WeightLock object internals: OFFSET SIZE

    1.4K20发布于 2021-05-24
  • 来自专栏SpringBoot教程

    Java对象内存布局和对象头

    : 保存偏向时间戳 markword(64位)分布图,对象布局、GC回收和后面的锁升级就是对象标记MarkWord里面标志位的变化 5、Object obj = new Object()解析 1、JOL 证明 JOL <! -- 定位:分析对象在JVM的大小和分布 --> <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core

    69520编辑于 2023-02-16
  • 来自专栏运维开发故事

    JVM 从入门到放弃之 Java 对象创建过程

    打印对象状态 JOL(Java Object Layout)一款开源的用于分析 JVM 中对象布局的一个小工具。 这使得 JOL 比其他依赖堆转储、规范假设等的工具更准确。 maven 仓库依赖如下: <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> ; import org.openjdk.jol.info.GraphLayout; public class ObjectTest2 { public static void main(String www.oracle.com/technetwork/java/javase/tech/biasedlocking-oopsla2006-preso-150106.pdf https://github.com/openjdk/jol

    1K10编辑于 2022-04-05
  • 来自专栏程序那些事

    JVM系列之:详解java object对象在heap中的结构

    简介 在之前的文章中,我们介绍了使用JOL这一神器来解析java类或者java实例在内存中占用的空间地址。 今天,我们会更进一步,剖析一下在之前文章中没有讲解到的更深层次的细节。一起来看看吧。 工具当然是使用JOL: @Slf4j public class JolUsage { @Test public void useJol(){ log.info("{}" 有的小伙伴可能发现了问题,之前我们用JOL解析Object对象的时候,Object head大小是12字节,也就是96bits,这里怎么写的是128bits? ? 我们用JOL再看一次: log.info("{}",ClassLayout.parseClass(byte[].class).toPrintable()); log.info("{}",ClassLayout.parseInstance

    1.4K41发布于 2020-07-24
  • 来自专栏Netty历险记

    元空间在哪里

    jctools-core</artifactId> <version>2.1.2</version> </dependency> <dependency> <groupId>org.openjdk.jol </groupId> <artifactId>jol-core</artifactId> <version>0.9</version> </dependency> package com.infuq.memory ; import org.jctools.util.UnsafeAccess; import org.openjdk.jol.info.ClassLayout; import org.openjdk.jol.vm.VM

    1.3K20编辑于 2022-06-02
  • 来自专栏程序那些事

    JVM系列之:String,数组和集合类的内存占用大小

    简介 之前的文章中,我们使用JOL工具简单的分析过String,数组和集合类的内存占用情况,这里再做一次更详细的分析和介绍,希望大家后面再遇到OOM问题的时候不再抱头痛哭,而是可以有章可循,开始吧。 数组 先看下JOL的代码和输出: //byte arraylog.info("{}",ClassLayout.parseInstance("www.flydean.com".getBytes()).toPrintable 同样的我们还是用JOL来分析: //Stringlog.info("{}",ClassLayout.parseInstance("www.flydean.com").toPrintable()); 输出结果

    86610发布于 2020-07-23
  • 来自专栏彭旭锐

    JVM 系列(4)一看就懂的对象内存布局 审核中

    使用 JOL 分析对象内存布局 这一节我们演示使用 JOL(Java Object Layout)[3] 来分析 Java 对象的内存布局。 : Only HotSpot/OpenJDK VMs are supported 3.1 使用步骤 现在,我们使用 JOL 分析 new Object() 在 HotSpot 虚拟机上的内存布局,模板程序如下 : 示例程序 // 步骤一:添加依赖 implementation 'org.openjdk.jol:jol-core:0.11' // 步骤二:创建对象 Object obj = new Object 如下图所示: 提示: 在上文使用 JOL 分析对象内存布局时,输入日志 Using compressed oop with 3-bit shift. (Java Object Layout): https://openjdk.org/projects/code-tools/jol/ [4] 深入理解 Java 虚拟机(第 3 版)(第 1、3、13

    64310编辑于 2022-09-26
  • 来自专栏深入浅出JVM

    深入浅出JVM(一)之Hotspot虚拟机中的对象

    导入JOL依赖 <! -- https://mvnrepository.com/artifact/org.openjdk.jol/jol-core --> <dependency> < groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>

    48941编辑于 2024-09-24
  • 来自专栏从码农的全世界路过

    Java 对象在内存

    JVM中开辟的内存空间必须是8字节的倍数, 如果缺少位数,需要补全为8的倍数; 以上各字段共28字节,需补全4字节 所以MyObject对象共占用8+4+0+16+4=32字节 下面利用openjdk的jol 最后,附上openjdk.jol的maven依赖 <dependency> <groupId>org.openjdk.jol</groupId> <version>0.9</version > <artifactId>jol-cli</artifactId> </dependency>

    41610编辑于 2022-06-20
领券