基本介绍和使用

Java Object Layout (JOL)

openjdk/jol github

maven

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

jar 包结构图

实例

public class D1 {static class D2 {}static class D3 {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}public static void main(String[] args) {D2 d2 = new D2();D3 d3 = new D3();d3.setName("admin");System.out.println(ClassLayout.parseInstance(d2).toPrintable());System.out.println(ClassLayout.parseInstance(d3).toPrintable());}
}

Object类

Sync 对对象布局的影响

0.9 版本

大端存储和小端存储

“字节序”是个什么鬼?

  public static void ByteOrder() {ByteOrder byteOrder = ByteOrder.nativeOrder();System.out.println(byteOrder);}


java 是 小端存储。低位字节在前,高位字节在后。

内存地址,高位 -> 低位

指针压缩

Compressed oops in the Hotspot JVM


可以看到默认是开启的,那么我们将其关闭后看看有什么效果

UseCompressedClassPointers
UseCompressedOops
---
-XX:-UseCompressedClassPointers
-XX:-UseCompressedOops

开启指针压缩
关闭指针压缩

锁升级的过程

无锁 01


无锁状态下是 01

偏向锁 101

查询偏向锁相关参数

java -XX:+PrintFlagsFinal -version | findstr BiasedLocking


默认情况下偏向锁开启并且延时4s生效。

测试5s前后打印对象布局区别

在4s偏向锁生效前返回01代表无锁,5s后返回101代表开启偏向模式。

取消偏向锁延时

-XX:BiasedLockingStartupDelay=0


可以看到立马进入偏向模式。

关闭偏向锁

布尔类型参数,+代表true,-代表false。

//关闭偏向锁
-XX:-UseBiasedLocking
//开启偏向锁
-XX:+UseBiasedLocking


关闭偏向锁进入无锁状态。

偏向模式获取锁

取消进入偏向模式延迟后,加锁的过程

偏向模式计算hashcode


计算hashcode后会立刻退出偏向模式。

轻量级锁 00


关闭偏向锁后,返回00代表轻量级锁开启。

重量级锁 10

两个线程同时竞争膨胀为重量级锁。

深入浅出Java Object Layout (JOL)相关推荐

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

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

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

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

  3. JOL - Java Object Layout

    JOL: 查看Java对象布局 Maven添加依赖包: <dependency><groupId>org.openjdk.jol</groupId><arti ...

  4. java对象布局查看工具_Java 查看对象布局工具 - Java Object Layout

    引入依赖 org.openjdk.jol jol-core 0.10 使用方式/** * 测试 User 对象在内存中的布局 * * @author CHAN * @date 2020/04/28 * ...

  5. 形式参数内存在哪java_深入浅出Java中JVM内存管理

    原标题:深入浅出Java中JVM内存管理 Java岗位面试,JVM是对程序员基本功考察,通常会问你对JVM了解吗?可以分几部分回答这个问题,首先JVM内存划分 | JVM垃圾回收的含义 | 有哪些GC ...

  6. java Object解析

    java Object是所有对象的根父类,所有对象都直接或间接集成自该类. java 的Object类也比较简单,有equals(Object).toString().finalize() java方 ...

  7. Java Object.hashCode()方法

    Java Object.hashCode()方法 @(JAVA)[java] 更详细的内容可以参考<effective java>与<think in java> Object ...

  8. 深入浅出 Java CMS 学习笔记

    转载自  深入浅出 Java CMS 学习笔记 引子 带着问题去学习一个东西,才会有目标感,我先把一直以来自己对CMS的一些疑惑罗列了下,希望这篇学习笔记能解决掉这些疑惑,希望也能对你有所帮助. 1. ...

  9. 深入浅出 Java 中的包装类

    转载自   深入浅出 Java 中的包装类 前阵子,我们分享了<Java中的基本数据类型转换>这篇文章,对许多粉丝还是有带来帮助的,今天讲一下 Java 包装类的的由来,及自动装箱.拆箱的 ...

最新文章

  1. Java8 HashMap实现原理探究
  2. “rm -rf”相当于Windows?
  3. JMeter接口测试示例(六)——上传文件
  4. 魔兽争霸III 1.20, 1.21 1.22 需要特定语言版本之Window 解决办法
  5. Android中视图重绘的方法
  6. 【思维导图】nav_msgs/Odometry 消息的构成及订阅
  7. 【Python】改变对象的字符串显示
  8. 解决传奇hero引擎和登陆器不配套的方法
  9. 【辅助开发】游戏辅助开发全流程-golang
  10. golang:IO File 操作
  11. shell 小米system锁adb_小米Max刷机及ADB操作
  12. excel数据分类与自动填充
  13. IE6下图片的浏览剪裁与上传
  14. 什么是增值税的进项税和销项税?
  15. ExecutorUtil
  16. 测试用例设计之一——Orthogonal Array Testing Strategy(OATS)
  17. 解决 Error querying database. Cause: java.sql.SQLException: sql injection violation....
  18. 在Vue+Element ui 项目中如何使用iconfont(阿里图标库)中的图标
  19. 模仿360安全卫士项目笔记4
  20. 疯狂坦克高抛,半抛,小抛算法

热门文章

  1. 1697_python编程_assertions and exceptions
  2. C# winform设置开机启动
  3. 新机如何把机械硬盘中的系统克隆到固态硬盘
  4. Laravel实现dingo+JWT api接口之实战篇
  5. Javaweb-ajax的使用
  6. 面向对象设计原则之接口隔离原则
  7. 中小企业如何危中求机?接住这套私域流量低成本解决方案!
  8. etf持仓和现货黄金走势有多大关系?
  9. 敲简单前端小游戏——贪吃蛇
  10. 【转】Downgrade iOS 4 to OS 3.1.3/3.1.2 (iPhone, iPod Touch)