注意:本文默认环境为 64 位操作系统,JDK 为 1.8,JVM 为 HotSpot。

工具

JOL全称为Java Object Layout,是用来分析JVM中对象布局的工具,可以在运行时计算某个对象的大小。

官网: http://openjdk.java.net/projects/code-tools/jol/

JOL依赖:

<dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-core</artifactId><version>0.10</version>
</dependency>

基础

  • 对象由对象头header、实例数据instance和对齐填充padding组成。
  • header:32位机器是8字节,64位级是16字节(开启指针压缩是12字节)。header包括markword和klass类型指针。markword在32位机器是32bit即4字节,在64位机器是64bit也就是8字节。klass指针在32位机器是4字节,在64位机器开启指针压缩是4字节不开启则是8字节。
  • HotSpot创建的对象,默认顺序:从长到短排列,引用排最后: long/double --> int/float --> short/char --> byte/boolean --> Reference
  • HotSpot VM对字段有自己的分配策略,并不一定会安按照类定义字段的顺序分配内存,而是尽可能相同字宽的字段分配到一起。
  • 对齐填充:HotSpot VM要求对象大小必须是8字节的整数倍。

案例

package utils;
import org.openjdk.jol.info.ClassLayout;public class LayOutTest {public static void main(String[] args) {TestClass testClass = new TestClass();System.out.println(ClassLayout.parseInstance(testClass).toPrintable());}
}
class TestClass{private boolean a;private byte b;private short c;private double d;private  int  e;private long f;private  Object g;private char h;private Object[] objArr;
}

对象长度是:12(header)+1(boolean)+1(byte)+2(short)+8(double)+4(int)+8(long)+2(char)+4*2(reference)+6(padding)=48。使用JOL下面验证下,我的是64位Windows,默认开启指针压缩。

使用JOL工具计算Java对象的大小相关推荐

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

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

  2. 怎么计算java对象的大小?

    java编程中处处离不开对象,是否了解对象在内存中结构?是否知道如何计算对象在内存中具体大小呢?本篇文章将想你介绍对象在内存中布局以及如何计算对象大小. 内存结构 在HotSpot虚拟机中,对象在内存 ...

  3. java统计空间占用_JVM —— Java 对象占用空间大小计算

    引用类型(reference type: Integer)在 32 位系统上每一个占用 4bytes(即32bit, 才干管理 2^32=4G 的内存), 在 64 位系统上每一个占用 8bytes( ...

  4. JVM —— Java 对象占用空间大小计算

    零. 为什么要知道 Java 对象占用空间大小 缓存的实现: 在设计 JVM 内缓存时(不是借助 Memcached. Redis 等), 需要知道缓存的对象是否会超过 JVM 最大堆限制, 如果会超 ...

  5. JOL:查看Java 对象布局、大小工具

    编写不易,转载请注明(http://shihlei.iteye.com/blog/2407693)! 一 概述 最近需求,打算再内存缓存数据,数据量130000万并且还会增加,了解这些数据占用空间的大 ...

  6. JOL工具及其分析对象在JVM的大小和分布

    一.JOL简介 JOL全称为Java Object Layout,是分析JVM中对象布局的工具,该工具大量使用了Unsafe.JVMTI来解码布局情况,所以分析结果是比较精准的.通常分析java对象的 ...

  7. 计算 java_两种计算Java对象大小的方法(转)

    原文:http://blog.csdn.net/iter_zc/article/details/41822719 另一篇类似文章:http://www.cnblogs.com/magialmoon/p ...

  8. 聊聊JVM(三)两种计算Java对象大小的方法

    普通对象的结构如下,按64位机器的长度计算 1. 对象头(_mark), 8个字节 2. Oop指针,如果是32G内存以下的,默认开启对象指针压缩,4个字节 3. 数据区 4.Padding(内存对齐 ...

  9. instrumentation java_使用Instrumentation计算java对象大小

    对象大小的计算 正如笔者看的这篇文章所描述的一样,当我们试图获取一个JVM中的对象实际占用的空间大小时.通常使用的方法是徒手计算,或者通过gc计算前后内存差来估计对象大小.而今天要介绍的方法--利用I ...

最新文章

  1. weblogic10重置控制台密码
  2. LLVM 与 Clang 介绍 — LinuxTOY
  3. 吴恩达神经网络1-2-2_图神经网络进行药物发现-第2部分
  4. 神经网络技巧篇之寻找最优参数的方法
  5. 比特币 Logo 背后有哪些历史及象征意义?Logo 上的“B”为什么会向右倾斜?
  6. Redis学习手册(List数据类型)(转)
  7. 赶在世界末日前完成的2012年全年总结
  8. 《穿越计算机的迷雾》读书笔记四
  9. 堪称最详细的支付系统设计
  10. 北京邮电计算机学院保研概率,北京邮电大学计算机学院(专业学位)计算机技术保研细则...
  11. html表格的冻结列
  12. nokia 6300手机QQ4.0下载,设置空间支持jar下载
  13. ubuntu 命令行批量重命名文件夹
  14. 【Unity3D 问题总结】Unity报错提示:Asset database transaction committed twice
  15. 二. 征服C指针:C如何使用内存
  16. html载入3d模型,three.js加载三维模型_郭隆邦技术博客
  17. java 获取mp3 封面_java如何获取.mp3格式文件内置歌曲封面
  18. 【读书笔记@观点】正确的认识论
  19. Python从视频文件中提取音频
  20. [转]基于Video4Linux的USB摄像头图…

热门文章

  1. 罚函数(内点罚函数和外点罚函数)
  2. 查看或修改mysql数据库及表编码格式
  3. linux内核源码—编程之路
  4. 一点资讯signature分析
  5. 【CC2640】CC2640架构及原理
  6. 几款常用压测工具介绍与使用
  7. python函数中self的作用_在Python中self的用途是什么?
  8. logback filter过滤器简介说明
  9. 社区发现不得不了解的库,包含Louvain 算法、Girvan-Newman 算法等多种社区发现算法,还具有可视化功能
  10. 百度地图之一百度地图搭建开发环境(老罗视频笔记整理)