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.----------
----------------------------------------------------------------
分享到:
相关推荐
使用POI,我们可以创建一个工作簿对象,然后遍历工作表,单元格等,读取数据并将其转化为Java对象。例如,如果Excel中的每一行代表一个用户对象,我们可以通过循环遍历行和列,构建User对象并填充属性。 对于CSV...
`memoryutil` 是一个实用工具,专门用于报告Java对象在内存中的使用情况。这个工具可以帮助开发者深入理解对象内存占用,从而进行更有效的内存优化。 首先,Java内存主要分为三个区域:堆内存(Heap)、栈内存...
xml报文和java对象互相转换 相关jar包和测试代码,可以与castor插件java对象和XML自动绑定maping文件生成和java对象一键生成工具1.2(https://download.csdn.net/download/kemoing/10864595)完美配合使用
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编程语言中,面向对象程序设计(Object-Oriented Programming, OOP)是一种核心的编程范式,它基于“对象”概念,将数据和处理数据的方法封装在一起,以实现代码的模块化和可重用性。这个压缩包文件"JAVA面向...
在Java面向对象程序设计实验课的学习过程中,我深入体验了Java语言的强大特性和它在软件开发中的重要地位。Java作为一种面向对象的语言,它的核心概念包括抽象、封装、继承和多态,这些特性使得Java在软件工程中具有...
本资源包含《Java面向对象编程》的电子书,实例源代码,课后题答案等可以说是当前该书最全的资源了。。。 PS:本资源共计18个分卷,后8个分卷虽也已上传却始终显示不出来。我只能换名重发资源。后续分卷改名为《Java...
Java对象池是一种优化资源管理的技术,它通过复用已经创建并初始化过的对象,避免了频繁地创建和销毁对象带来的性能开销。在Java中,对象池通常用于数据库连接、线程、Socket等昂贵资源的管理。下面我们将深入探讨...
《Java与UML面向对象程序设计》的前4章介绍了面向对象的精髓,第1章是关于对象的简介。第2章介绍了面向对象的基本概念以及UML的一些基本知识。第3章阐述了如何使用Java来编写面向对象程序。第4章介绍面向对象的分析...
在 Java 中,我们可以使用 `java.awt.Color` 类来表示颜色,该类提供了多种构造函数,可以根据不同的参数创建颜色对象。例如,我们可以使用 `Color(int r, int g, int b)` 构造函数根据红、绿、蓝三个分量的值创建...
* 使用JNI可以实现Java代码和C++代码之间的对象传递。 * 在Java代码中,可以使用native方法来调用C++代码。 * 在C++代码中,可以使用JNI来实现native方法的实现。 * `javah`工具可以生成JNI头文件。 * JNI头文件定义...
android(包括java)序列化一个对象传给php去做处理,或是接到php的序列化的对象在java中做处理的工具jar包以及使用方法. 使用方法: byte[] b = null; b = PHPSerializer.serialize(一个对象);//将一个对象序列化后返回...
通过《Java语言面向对象程序设计实验指导与习题答案》这本书,读者可以系统地学习和掌握这些Java编程的核心知识点,并通过实践来巩固理论知识,进一步提升编程技能。书中的习题答案则为读者提供了自我检验和提升的...
C++的模板允许泛型编程,可以在编译时生成针对不同类型的代码,而Java的泛型是在运行时检查类型安全性的。 在异常处理方面,C++使用try-catch-finally结构,而Java也有类似的try-catch-finally语句块,但Java还引入...
通过这些源代码实例,我们可以深入探究Java语言的精髓,包括类、对象、封装、继承和多态等核心特性。 1. **类与对象**:在Java中,类是对象的蓝图,定义了对象的属性和行为。源代码中的示例会展示如何创建和使用类...
1. **Java JSON库**: 在Java中,我们可以使用多种库来实现对象到JSON的转换,如Jackson、Gson、Fastjson等。这里以广泛使用的Jackson库为例,它提供了方便的API用于处理JSON操作。 2. **Jackson库**: Jackson库包含...
java 面向对象 案例 合集java 面向对象 案例 合集java 面向对象 案例 合集java 面向对象 案例 合集java 面向对象 案例 合集java 面向对象 案例 合集java 面向对象 案例 合集java 面向对象 案例 合集java 面向对象 ...