使用JOL工具计算Java对象的大小
注意:本文默认环境为 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对象的大小相关推荐
- openjdk jol 工具打印 Java 对象内存布局
1.maven 依赖 <dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-cor ...
- 怎么计算java对象的大小?
java编程中处处离不开对象,是否了解对象在内存中结构?是否知道如何计算对象在内存中具体大小呢?本篇文章将想你介绍对象在内存中布局以及如何计算对象大小. 内存结构 在HotSpot虚拟机中,对象在内存 ...
- java统计空间占用_JVM —— Java 对象占用空间大小计算
引用类型(reference type: Integer)在 32 位系统上每一个占用 4bytes(即32bit, 才干管理 2^32=4G 的内存), 在 64 位系统上每一个占用 8bytes( ...
- JVM —— Java 对象占用空间大小计算
零. 为什么要知道 Java 对象占用空间大小 缓存的实现: 在设计 JVM 内缓存时(不是借助 Memcached. Redis 等), 需要知道缓存的对象是否会超过 JVM 最大堆限制, 如果会超 ...
- JOL:查看Java 对象布局、大小工具
编写不易,转载请注明(http://shihlei.iteye.com/blog/2407693)! 一 概述 最近需求,打算再内存缓存数据,数据量130000万并且还会增加,了解这些数据占用空间的大 ...
- JOL工具及其分析对象在JVM的大小和分布
一.JOL简介 JOL全称为Java Object Layout,是分析JVM中对象布局的工具,该工具大量使用了Unsafe.JVMTI来解码布局情况,所以分析结果是比较精准的.通常分析java对象的 ...
- 计算 java_两种计算Java对象大小的方法(转)
原文:http://blog.csdn.net/iter_zc/article/details/41822719 另一篇类似文章:http://www.cnblogs.com/magialmoon/p ...
- 聊聊JVM(三)两种计算Java对象大小的方法
普通对象的结构如下,按64位机器的长度计算 1. 对象头(_mark), 8个字节 2. Oop指针,如果是32G内存以下的,默认开启对象指针压缩,4个字节 3. 数据区 4.Padding(内存对齐 ...
- instrumentation java_使用Instrumentation计算java对象大小
对象大小的计算 正如笔者看的这篇文章所描述的一样,当我们试图获取一个JVM中的对象实际占用的空间大小时.通常使用的方法是徒手计算,或者通过gc计算前后内存差来估计对象大小.而今天要介绍的方法--利用I ...
最新文章
- weblogic10重置控制台密码
- LLVM 与 Clang 介绍 — LinuxTOY
- 吴恩达神经网络1-2-2_图神经网络进行药物发现-第2部分
- 神经网络技巧篇之寻找最优参数的方法
- 比特币 Logo 背后有哪些历史及象征意义?Logo 上的“B”为什么会向右倾斜?
- Redis学习手册(List数据类型)(转)
- 赶在世界末日前完成的2012年全年总结
- 《穿越计算机的迷雾》读书笔记四
- 堪称最详细的支付系统设计
- 北京邮电计算机学院保研概率,北京邮电大学计算机学院(专业学位)计算机技术保研细则...
- html表格的冻结列
- nokia 6300手机QQ4.0下载,设置空间支持jar下载
- ubuntu 命令行批量重命名文件夹
- 【Unity3D 问题总结】Unity报错提示:Asset database transaction committed twice
- 二. 征服C指针:C如何使用内存
- html载入3d模型,three.js加载三维模型_郭隆邦技术博客
- java 获取mp3 封面_java如何获取.mp3格式文件内置歌曲封面
- 【读书笔记@观点】正确的认识论
- Python从视频文件中提取音频
- [转]基于Video4Linux的USB摄像头图…