Java 对象布局、大小工具 jar包工具类jol
一 概述
最近需求,打算再内存缓存数据,数据量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 对象布局、大小工具 jar包工具类jol相关推荐
- Stegsolve查看隐水印(暗水印)java jar包工具
Stegsolve查看隐水印.隐写水印.暗水印的java jar包工具 (1)下载jar包 file/Stegsolve.jar at main · zhangphil/file · GitHubCo ...
- java统计空间占用_JVM —— Java 对象占用空间大小计算
引用类型(reference type: Integer)在 32 位系统上每一个占用 4bytes(即32bit, 才干管理 2^32=4G 的内存), 在 64 位系统上每一个占用 8bytes( ...
- JVM —— Java 对象占用空间大小计算
零. 为什么要知道 Java 对象占用空间大小 缓存的实现: 在设计 JVM 内缓存时(不是借助 Memcached. Redis 等), 需要知道缓存的对象是否会超过 JVM 最大堆限制, 如果会超 ...
- 一步一步学java(7):jar包使用方法及常用jar包分类汇总(持续更新)
java最大的特点和优势就是纯面向对象.开源,除了JDK.JRE自带的基础类库之外,还有非常多的大牛们开发了各种应用的类库(jar包),本篇主要介绍一下这些类库的使用方法,并把常用jar包分类汇总,以 ...
- 在cmd中使用命令来编译并运行java程序,导入其他jar包,使用windows批处理文件
一.使用cmd编译并运行java程序 今天帮朋友做一件事,他是一个不懂技术的人,说需要一个工具来做数据筛选,没有什么学识的我只想到了使用java程序来实现,于是上去就是一通abcd,玩笑归玩笑,做完了 ...
- java 中如何打包成 jar 包
这里写目录标题 1. java 中如何打包成 jar 包 1.1. 手动打包可直接执行的 jar 包 1.2. 使用 intellij idea 工具打包可直接执行的 jar 包 1. java 中如 ...
- Virbox Protector Java 虚拟化上线!支持jar包二次调用!
Java 程序简介 Java 是上世纪90年代初由 SUN 公司开发的一种面向对象编程语言,因其语法简单.跨平台.拥有丰富又成熟的框架,开发效率高,在服务端应用.Web 应用等领域形成了巨大优势,成为 ...
- JAVA对象布局之对象头(Object Header)
由于Java面向对象的思想,在JVM中需要大量存储对象,存储时为了实现一些额外的功能,需要在对象中添加一些标记字段用于增强对象功能 .在学习并发编程知识synchronized时,我们总是难以理解其实 ...
- JS播放音频 JS播放mp3 JS播放音乐 Java播放音频 Java播放音乐 Java播放mp3 的jmp123.jar包安装 语音播报 Java获取根路径
JS播放音频 JS播放mp3 // @Bind #jsPlayMp3Btn.onClick !function(self, arg) {var mp3Url = "http://localh ...
- java9可执行jar_单个java文件打成可执行jar包
1 概述 使用JDK自带的jar与java将单个java文件打成可执行jar包并运行. 当然也可以使用IDE完成,使用Maven只需要一个简单的package,但是单个文件嘛,没必要这么"凶 ...
最新文章
- dockerfile kafka
- 瞧瞧,这样的代码才叫Pythonic
- 7-3 逆序的三位数 (Java)
- php和python对比-通过PHP与Python代码对比浅析语法差异
- 遭遇sal.xls.exe
- 字符串格式化---StrFormatter
- Facebook推出人脸识别新功能,防止用户肖像遭滥用
- python xlwt xlrd 写入一行_自己总结python用xlrd\xlwt读写excel
- 记录uni-app弹框事件无生命周期问题;uni-popup-dialog打开触发事件;uni-popup-dialog调用接口时机
- jstree中json data 的生成
- (转)币圈人物志 BM(EOS,BTS,Steem缔造者)
- 带领初学者学习 SQL 数据库编程视频教程(28 个视频)
- java定时任务_定时任务3种实现方式
- axis调用webservice
- 使用wps的邮件合并和文档附件制作带照片的准考证
- 基于 go-cqhttp 开发的 SSPU的QQ机器人小助手
- 一文扫尽检测类评估指标:AP、mAP、ReCall、OKS和IoU
- 为中国操作系统内核而写的教程 1
- 写给程序员看的面向对象摄影技巧
- USB接口测试器--USB2.0/USB3.0信号检测器
热门文章
- mysql-connector-java 5.1.13,Java连MySQL,mysql-connector-java-5.1.13-bin.jar究竟要怎
- 重置单例对象Singleton Swift
- c语言显示cpuid_ccpuid:CPUID信息模块。范例:显示所有的CPUID信息
- tableau示例超市数据在哪儿_Tableau | 超市销售数据可视化分析
- Bitwise AND of Numbers Range
- matlab仿真之大尺度衰落因子的产生
- vector容器v1、v2之间相互赋值的三种方法及易错点详解
- 【ide】myeclipse项目右键没有configure
- mysql去掉两个最高分_Excel函数 去掉最高分和最低分取平均值?这个函数不可不知...
- oracle的sql字符串转义,sql – 在Oracle数据库中搜索带转义的字符串