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.----------
----------------------------------------------------------------
分享到:
相关推荐
定义protobuf文件(包含enum,message,required,optional,repeated, 结构体定义中引用另一个结构体), 生成java文件,能够构建java对象,并转化为字节byte或者流,能够将流或字节转化为对象
json格式与java类对象相互转换。json格式转换成java类对象,List,Map。类对象转换成json。
类似jaxb 技术 java对象集合与Excel列表或者是CSV文件之间的互相转换
java内置对象简介、四种属性范围的一些简单的源代码介绍。
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例...
注入javaagent使用Instrumentation测量Java对象的大小
有效测量出 java 对象 内存 大小 可供缓存等计算
Java 面向对象 练习题与答案
java面向对象程序设计全书课后答案全解! 包括每章节课后题的程序代码!
java-sizeof-0.0.4:一个查看java对象占用内存大小
本资源包含《Java面向对象编程》的电子书,实例源代码,课后题答案等可以说是当前该书最全的资源了。。。 PS:本资源共计18个分卷,后8个分卷虽也已上传却始终显示不出来。我只能换名重发资源。后续分卷改名为《Java...
内存工具util报告Java对象的内存
该例子是将xml文件映射为java对象的例子。 commons-betwixt-0.8.jar
《Java与UML面向对象程序设计》的前4章介绍了面向对象的精髓,第1章是关于对象的简介。第2章介绍了面向对象的基本概念以及UML的一些基本知识。第3章阐述了如何使用Java来编写面向对象程序。第4章介绍面向对象的分析...
java中对象的作用,如何获取Request对象 java中对象的作用,如何获取Request对象
《java程序设计》课程的题库资料,由贺州学院整理,可供学生期末课程复习使用,也可以供相关...10. Java是面向对象的语言,对象是客观事物,对象与之是一一对应,它是很具体的概念。( ) 答案:× [考点范围] JAVA简介
经过这几周对Java面向对象程序设计的学习,让我更加了解到Java学习的重要性,以及Java对我们专业的发展发挥的作用。在上个学期我们也学习了Java语言程序设计基础,在此基础之上学习起来就方便了一些,做其实验来也会...
Gson这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。Gson支持任意复杂Java对象包括没有源代码的对象。
统计缓存大小(查看java对象所占的内存大小).
model VO 值复制 注解 注解实现相同对象,不同对象,集合与集合复制,不再需要手动。 可以对多个对象进行复制,可以指定复制的类型