深入浅出Java Object Layout (JOL)
基本介绍和使用
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)相关推荐
- JOL(java object layout --java 对象内存布局)
JOL(java object layout --java 对象内存布局) ⚠⚠⚠本文以java普通对象为切入点,分析java的对象内存布局,数组见文末 maven地址
- JOL(java object layout): java 对象内存布局
我们天天都在使用java来new对象,但估计很少有人知道new出来的对象到底长的什么样子?对于普通的java程序员来说,可能从来没有考虑过java中对象的问题,不懂这些也可以写好代码.今天,给大家介绍 ...
- JOL - Java Object Layout
JOL: 查看Java对象布局 Maven添加依赖包: <dependency><groupId>org.openjdk.jol</groupId><arti ...
- java对象布局查看工具_Java 查看对象布局工具 - Java Object Layout
引入依赖 org.openjdk.jol jol-core 0.10 使用方式/** * 测试 User 对象在内存中的布局 * * @author CHAN * @date 2020/04/28 * ...
- 形式参数内存在哪java_深入浅出Java中JVM内存管理
原标题:深入浅出Java中JVM内存管理 Java岗位面试,JVM是对程序员基本功考察,通常会问你对JVM了解吗?可以分几部分回答这个问题,首先JVM内存划分 | JVM垃圾回收的含义 | 有哪些GC ...
- java Object解析
java Object是所有对象的根父类,所有对象都直接或间接集成自该类. java 的Object类也比较简单,有equals(Object).toString().finalize() java方 ...
- Java Object.hashCode()方法
Java Object.hashCode()方法 @(JAVA)[java] 更详细的内容可以参考<effective java>与<think in java> Object ...
- 深入浅出 Java CMS 学习笔记
转载自 深入浅出 Java CMS 学习笔记 引子 带着问题去学习一个东西,才会有目标感,我先把一直以来自己对CMS的一些疑惑罗列了下,希望这篇学习笔记能解决掉这些疑惑,希望也能对你有所帮助. 1. ...
- 深入浅出 Java 中的包装类
转载自 深入浅出 Java 中的包装类 前阵子,我们分享了<Java中的基本数据类型转换>这篇文章,对许多粉丝还是有带来帮助的,今天讲一下 Java 包装类的的由来,及自动装箱.拆箱的 ...
最新文章
- Java8 HashMap实现原理探究
- “rm -rf”相当于Windows?
- JMeter接口测试示例(六)——上传文件
- 魔兽争霸III 1.20, 1.21 1.22 需要特定语言版本之Window 解决办法
- Android中视图重绘的方法
- 【思维导图】nav_msgs/Odometry 消息的构成及订阅
- 【Python】改变对象的字符串显示
- 解决传奇hero引擎和登陆器不配套的方法
- 【辅助开发】游戏辅助开发全流程-golang
- golang:IO File 操作
- shell 小米system锁adb_小米Max刷机及ADB操作
- excel数据分类与自动填充
- IE6下图片的浏览剪裁与上传
- 什么是增值税的进项税和销项税?
- ExecutorUtil
- 测试用例设计之一——Orthogonal Array Testing Strategy(OATS)
- 解决 Error querying database. Cause: java.sql.SQLException: sql injection violation....
- 在Vue+Element ui 项目中如何使用iconfont(阿里图标库)中的图标
- 模仿360安全卫士项目笔记4
- 疯狂坦克高抛,半抛,小抛算法
热门文章
- 1697_python编程_assertions and exceptions
- C# winform设置开机启动
- 新机如何把机械硬盘中的系统克隆到固态硬盘
- Laravel实现dingo+JWT api接口之实战篇
- Javaweb-ajax的使用
- 面向对象设计原则之接口隔离原则
- 中小企业如何危中求机?接住这套私域流量低成本解决方案!
- etf持仓和现货黄金走势有多大关系?
- 敲简单前端小游戏——贪吃蛇
- 【转】Downgrade iOS 4 to OS 3.1.3/3.1.2 (iPhone, iPod Touch)