MemoryUtil
关于java对象内存的基本知识,请参考
http://zhang-xzhi-xjtu.iteye.com/blog/2116304
源代码
https://github.com/zhang-xzhi/memoryutil
以下功能对于32bits JVM,64bits JVM开启压缩指针,64bits JVM关闭压缩指针都适用。
MemoryUtil
可以获得对象的shallowsize。
可以获得对象的fullsize。
可以获得对象的padding size。
可以获得对象的full padding size。
MemoryDetailEntry的toString方法。
可以打印对象的详情信息。
包括对象头,各个field的offset和大小。
padding大小。
引用的对象的详情信息。
allen.memoryutil.size
可以动态检查对象头大小。(普通对象和数组对象)
可以动态检查引用大小。
可以获得基本类型大小。
如何使用
0 查看memoryutil默认输入,在jar目录下输入 java -javaagent:memoryutil-0.1.jar -cp . allen.memoryutil.dirver.TestMemory。
1 加memoryutil-0.1.jar到工程的class path。
2 建立自己的入口类,假设为test.Allen,调用memoryutil的工具类打印测试对象的信息。
3 在命令行执行 java -javaagent:memoryutil-0.1.jar -cp . test.Allen
"abcd"字符串的详情例子
----------------------------------------------------------------
object class info : java.lang.String //对象类型
object identityHashCode : 4875744 //对象identityHashCode
in parent info : root object
shallow size = 24 //对象shallow size
full size = 48 //对象full size
full padding size = 4 //对象full padding size
-----------shallow size detail.----------------- //对象shallow size的详情信息
headerType = NormalHeader size = 8 //普通对象头,大小为8
offset : 8 size = 4 private final char[] java.lang.String.value //value field的offset为8,大小为4。
offset : 12 size = 4 private final int java.lang.String.offset //offset field的offset为12,大小为4。
offset : 16 size = 4 private final int java.lang.String.count //count field的offset为16,大小为4。
offset : 20 size = 4 private int java.lang.String.hash //hash field的offset为20,大小为4。
padding size = 0 //padding为0。
-----------end of shallow size detail.----------
//该字符串引用的char[]详情信息
object class info : char[]
object identityHashCode : 15672056
in parent info : private final char[] java.lang.String.value in parent. //对象在被引用对象中的位置信息。
shallow size = 24
full size = 24
full padding size = 4
-----------shallow size detail.-----------------
headerType = ArrayHeader size = 12 //数组对象头,大小为12
compType = char arrayLength = 4 size = ( 2 * 4 ) = 8 //数组的类型为char,长度为4,大小为8。
padding size = 4 //padding为4。
-----------end of shallow size detail.----------
----------------------------------------------------------------
分享到:
相关推荐
`memoryutil` 是一个实用工具,专门用于报告Java对象在内存中的使用情况。这个工具可以帮助开发者深入理解对象内存占用,从而进行更有效的内存优化。 首先,Java内存主要分为三个区域:堆内存(Heap)、栈内存...
xml报文和java对象互相转换 相关jar包和测试代码,可以与castor插件java对象和XML自动绑定maping文件生成和java对象一键生成工具1.2(https://download.csdn.net/download/kemoing/10864595)完美配合使用
定义protobuf文件(包含enum,message,required,optional,repeated, 结构体定义中引用另一个结构体), 生成java文件,能够构建java对象,并转化为字节byte或者流,能够将流或字节转化为对象
Java 面向对象编程练习题与答案 本资源摘要信息涵盖了 Java 面向对象编程的多个知识点,包括 Font 类、Toolkit 类、包机制、抽象类、数组操作等。 1. Font 类: Font 类是 Java 中的一个类,用于设置程序中的字体...
除了将JSON转换为Java对象,我们还可以使用`ObjectMapper`将Java对象转换回JSON字符串,这对于前端展示或存储数据非常有用: ```java String json = mapper.writeValueAsString(outerObject); ``` 6. **异常...
不过,我可以基于《Java面向对象程序设计(第二版)》这个标题和标签,来详细说明Java面向对象程序设计中可能涵盖的知识点。 在深入介绍之前,首先需要明确面向对象程序设计(OOP)是一种编程范式,它使用“对象”...
### JSON转对象数组与对象数组转JSON(Java) 在Java编程语言中,处理JSON数据时经常需要进行JSON字符串与Java对象之间的转换。特别是在涉及到数组或集合的场景下,这种转换显得尤为重要。本文将详细介绍如何使用...
java实现对象转化为get请求的param参数String字符串,本人自测非常好用,一般对象可以转化键值对的格式,但是最近项目需要自己手动拼接对象作为get请求的参数,百度了一堆还不如自己写一个,欢迎各位使用,有什么...
在Java编程语言中,面向对象程序设计(Object-Oriented Programming, OOP)是一种核心的编程范式,它基于“对象”概念,将数据和处理数据的方法封装在一起,以实现代码的模块化和可重用性。这个压缩包文件"JAVA面向...
《Java面向对象程序设计(第3版)》是人民邮电出版社出版的一部经典教材,由杨晓燕和李选平两位专家共同编著。该书深入浅出地讲解了Java编程语言的核心概念和面向对象编程思想。PPT课件是教学辅助资料,通常包含了...
在Java面向对象程序设计实验课的学习过程中,我深入体验了Java语言的强大特性和它在软件开发中的重要地位。Java作为一种面向对象的语言,它的核心概念包括抽象、封装、继承和多态,这些特性使得Java在软件工程中具有...
JSON转换为JAVA对象及日期格式转换处理 -
java 判断对象是否为空.如String,Character,Object[]
这个导图可以帮助学习者系统地理解和掌握Java面向对象编程的核心概念,以及各种相关的语法和用法。 适用人群: 这个资源适用于初学者和有一定Java基础的开发者。初学者可以通过导图了解和学习Java面向对象编程的...
本资源包含《Java面向对象编程》的电子书,实例源代码,课后题答案等可以说是当前该书最全的资源了。。。 PS:本资源共计18个分卷,后8个分卷虽也已上传却始终显示不出来。我只能换名重发资源。后续分卷改名为《Java...
Java对象池是一种优化资源管理的技术,它通过复用已经创建并初始化过的对象,避免了频繁地创建和销毁对象带来的性能开销。在Java中,对象池通常用于数据库连接、线程、Socket等昂贵资源的管理。下面我们将深入探讨...
JAXB是Java平台标准版(Java SE)的一部分,提供了一种自动的方式来绑定XML Schema到Java类,使得XML文档可以被Java对象解析,同时Java对象也可以被序列化为XML文档。这种机制极大地简化了XML数据处理,尤其是在...
《Java与UML面向对象程序设计》的前4章介绍了面向对象的精髓,第1章是关于对象的简介。第2章介绍了面向对象的基本概念以及UML的一些基本知识。第3章阐述了如何使用Java来编写面向对象程序。第4章介绍面向对象的分析...
在 Java 中,我们可以使用 `java.awt.Color` 类来表示颜色,该类提供了多种构造函数,可以根据不同的参数创建颜色对象。例如,我们可以使用 `Color(int r, int g, int b)` 构造函数根据红、绿、蓝三个分量的值创建...
android(包括java)序列化一个对象传给php去做处理,或是接到php的序列化的对象在java中做处理的工具jar包以及使用方法. 使用方法: byte[] b = null; b = PHPSerializer.serialize(一个对象);//将一个对象序列化后返回...