java对象布局JOL(java object layout),描述对象在堆内存的布局。如下图:

1.markword 固定长度8byte,描述对象的identityhashcode,分代年龄,锁信息等(https://www.jb51.net/article/183984.htm);

2.klasspoint 固定长度4byte, 指定该对象的class类对象;

3.基本变量:用于存放java八种基本类型成员变量,以4byte步长进行补齐,使用内存重排序优化空间;

4.引用变量:存放类的引用变量句柄,如String,Object;每个句柄大小在32位虚拟机上是4byte,64位虚拟机上是8byte,但java8开始默认开启UseCompressedOops压缩参数,故也是4byte,   kasspoint也是如此;

5.补齐:对象大小必须是8byte的整数倍,用来补齐字节数。Object o = new Object() 在内存中占用16个字节,其中最后4个是补齐;

6.数组长度:如果是数组,额外占用固定4byte存放数组长度;

示例展示

1.jvm基本信息

4, 1, 1, 2, 2, 4, 4, 8, 8 分别表示:引用句柄, byte, boolean, char, short, int, float, double, long长度

2.new object

对象大小是16字节,其中最后4个字节是用来对齐的。

3.对象内存重排序

1)如果8中基本变量定义为包装类型,则变成了引用变量

2)以8byte为步长分配空间,header占用固定12字节,故开始需要对齐的4字节从int和float中选(哪个定义在前选哪个)

3)其他成员变量的分配顺序是基本类型变量优先引用类型变量,基本类型优先级double>long>float>char>short>byte>boolean,将补齐字节数降到最低

4.对象继承

其中父类中的成员变量优先于子类,其他同上

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

java jol原理_Java对象布局(JOL)实现过程解析相关推荐

  1. java clone方法_JAVA对象clone方法代码实例解析

    1.Cloneable接口 这个接口一个方法都没有,但是要使用clone方法,就必须实现这个接口,否则抛出CloneNotSupportedException异常 2.clone方法的返回值 先附上两 ...

  2. php环行队列实现,java数组实现队列及环形队列实现过程解析

    这篇文章主要介绍了java数组实现队列及环形队列实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码内容 ArrayQueue---用数 ...

  3. java的头怎么写_JAVA对象布局之对象头(Object Header)

    由于Java面向对象的思想,在JVM中需要大量存储对象,存储时为了实现一些额外的功能,需要在对象中添加一些标记字段用于增强对象功能 .在学习并发编程知识synchronized时,我们总是难以理解其实 ...

  4. 对象布局(JOL)、分配过程以及访问定位

    一.对象布局内存结构:对象头.实例数据.填充补齐(非必须) 无继承关系: 有继承关系: 1.对象头:以32位操作系统为例 对象头形式: 1)普通对象:8个字节(64位系统,不开启压缩指针是16个字节, ...

  5. java初始化实例化_Java对象的创建过程:类的初始化与实例化

    一.Java对象创建时机 我们知道,一个对象在可以被使用之前必须要被正确地实例化.在Java代码中,有很多行为可以引起对象的创建,最为直观的一种就是使用new关键字来调用一个类的构造函数显式地创建对象 ...

  6. java锁原理_Java锁原理学习

    Java锁原理学习 为了学习Java锁的原理,参照ReentrantLock实现了自己的可重入锁,代码如下: 先上AQS的相关方法: // AQS = AbstractQueuedSynchroniz ...

  7. java jvm原理_JAVA和JVM运行原理

    JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器.它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台,可以在上面执行java的字节码程序. 编译器负责把Java ...

  8. java concurrentmap原理_Java集合番外篇 -- ConcurrentHashMap底层实现和原理

    概述 距离上一次集合篇结束已经过了好久了, 之前说要写一下番外,但是太忙了,总也找不出相对松散的时间,也有点静不下心来,最近花了点时间,于是便有了这篇博客. 在开始之前先介绍一个算法, 这个算法和Co ...

  9. java并行计算同步返回_Java大文本并行计算实现过程解析

    Java大文本并行计算实现过程解析 简单提高文本读取效率,使用BufferedReader是个不错的选择.速度最快的方法是MappedByteBuffer,但是,相比BufferedReader而言, ...

最新文章

  1. Objective-C 什么是类
  2. Linux安装gcc时碰到的有关问题解决(解决gcc依赖有关问题)
  3. EBCDIK,EBCDIC,ASCII,shift JIS間の変換
  4. socket通信(5)4次挥手
  5. 2020-11-13(调用约定)
  6. 基于CentOS 搭建 FTP 文件服务
  7. 深入BCB理解VCL的消息机制
  8. Java开发中消息中间件的优势有哪些?
  9. 非线性光纤光学_1.56 m波段高能量百飞秒光纤激光器
  10. commons-lang3:DateUtils
  11. Adobe PhotoShop(PS) for Mac 如何隐藏切片框?
  12. 台式计算机进入安全模式蓝屏,windows进入系统安全模式时蓝屏怎么办?
  13. 《Spark与Hadoop大数据分析》一一1.1 大数据分析以及 Hadoop 和 Spark 在其中承担的角色...
  14. ROS笔记(31) ArbotiX关节控制器
  15. ionic 集成websocket
  16. 网页设计-[CSS+DIV设计实例:超酷的竖排导航栏 ]
  17. pytorch学习笔记(三十四):MiniBatch-SGD
  18. 4场直播丨EsgynDB连接服务层、Oracle、openGauss
  19. 2017年5月—信息安全工程师—上午综合知识(11-15)
  20. 打印参数量GFLOPs等的参考链接暂存+pycocotools安装

热门文章

  1. 增加表空间大小的四种方法
  2. jQuery禁止Ajax请求缓存
  3. 工程师、产品经理、数据工程师是如何一起工作的?
  4. Spring Aop之Advisor解析
  5. ZooKeeper3.4.5-最基本API开发
  6. 我们为何要使用多线程,它有什么优点?
  7. 该Tiled地图制作拿到项目~~这是偷懒,为了直接复制后写来
  8. wordpress插件制作视频教程【资料分享】
  9. 认识数据分析_认识您的最佳探索数据分析新朋友
  10. bi数据分析师_BI工程师和数据分析师的5个格式塔原则