编写不易,转载请注明(http://shihlei.iteye.com/blog/2407693)!
一 概述
最近需求,打算再内存缓存数据,数据量130000万并且还会增加,了解这些数据占用空间的大小是很常见的监控需要。
常规方式,人工可以按照Java基础数据类型大小及内容大小估算出缓存对象的大概堆占用,但是麻烦还不准。
OpenJDK,提供了JOL包,可以帮我们在运行时计算某个对象的大小,是非常好的工具
官网:http://openjdk.java.net/projects/code-tools/jol/
定位:分析对象在JVM的大小和分布
依赖:
<dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>put-the-version-here</version> </dependency>
二 使用
1)准备一个map,用于测试JOL Api的结果
static Object generate() { Map<String, Object> map = new HashMap<>(); map.put("a", new Integer(1)); map.put("b", "b"); map.put("c", new Date()); for (int i = 0; i < 10; i++) { map.put(String.valueOf(i), String.valueOf(i)); } return map; }
2)常用的几个方法
(1)查看对象内部信息: ClassLayout.parseInstance(obj).toPrintable()
(2)查看对象外部信息:包括引用的对象:GraphLayout.parseInstance(obj).toPrintable()
(3)查看对象占用空间总大小:GraphLayout.parseInstance(obj).totalSize()
三 完整Demo
package x.demo.java; import java.util.Date; import java.util.HashMap; import java.util.Map; import org.openjdk.jol.info.ClassLayout; import org.openjdk.jol.info.GraphLayout; public class JolDemo { static Object generate() { Map<String, Object> map = new HashMap<>(); map.put("a", new Integer(1)); map.put("b", "b"); map.put("c", new Date()); for (int i = 0; i < 10; i++) { map.put(String.valueOf(i), String.valueOf(i)); } return map; } static void print(String message) { System.out.println(message); System.out.println("-------------------------"); } public static void main(String[] args) { Object obj = generate(); //查看对象内部信息 print(ClassLayout.parseInstance(obj).toPrintable()); //查看对象外部信息 print(GraphLayout.parseInstance(obj).toPrintable()); //获取对象总大小 print("size : " + GraphLayout.parseInstance(obj).totalSize()); } }
相关推荐
查看java对象内部构造
openjdk的一个工具,他可以很方便的让我看到一个对象的布局
主要介绍了Java对象布局(JOL)实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
乔尔 졸작
可以查阅java虚拟机中对象的内存分布,是OpenJDK的Code Tools项目中的工具,具体可以通过如下两套指令来实现: $ java -jar /path/to/jol-cli-0.9-full.jar internals java.util.HashMap $ java -jar /path/to/jol-...
对jol-core-0.10.jar进行拓展,打印二进制头信息Mark Word 用法: ClassLayout.parseInstance(对象).toPrintableSimple(true) toPrintableSimple():true 表示二进值,false 表示 十六进制
jol-cli-0.4-full.jar JOL
包含jol-cli的全部jar包: jol-cli-0.9-full.jar jol-cli-0.9-javadoc.jar jol-cli-0.9-sources.jar jol-cli-0.9.jar
对象大小 java-op-db connection-pool-test 连接池测试,包含高性能HikariCP,提供强大的监控和扩展功能druid MyBatis-demo MyBatis 测试 http-client-demo retrofit-test resume-parse Apache httpclient 测试 ...
主要介绍了Java synchronized锁升级jol过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要讲述了c++对象内存布局情况!
word源码java concurrency 并发 <groupId>org.openjdk.jol <artifactId>jol-core <version>0.8 out.println(ClassLayout.parseInstance(student).toPrintable()); -XX:+UseBiasedLocking ...关于java对象头的一
jwplayerjwplayerjwplayerjwplayerjwplayerjwplayerjwplayerjwplayer
继续承接上一篇博客一、从Java对象头看synchronized锁的状态 先通过几个案例,从结果直观的展示锁是如何膨胀的 最后将锁的膨胀过程通过一张流程图展示出来 案例1(无锁,不可偏向状态) import org.openjdk.jol....
ajtot jol beakaszto akaszto
映美Jolimark LQ-720K打印机驱动程序是一款可以有效解决映美Jolimark LQ-720K打印机在使用过程中出现的一些问题的驱动工具,本站提供了映美LQ-720K打印机驱动下载地址,需要的朋友们可以前来下载使用。 Jolimark LQ...
ajtot kivaloan jol beakaszto akaszto
akaszto ajto ezzel ajtot jol beakaszt
用于OpenTracing API的Jaeger Java绑定 com.uber.jaeger/jaeger-core/0.16.0/jaeger-core-0.16.0.jar