`
zhang_xzhi_xjtu
  • 浏览: 538791 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

可以查看java对象的MemoryUtil简介

阅读更多
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.----------
----------------------------------------------------------------



分享到:
评论

相关推荐

    Excel列表转化成java对象

    使用POI,我们可以创建一个工作簿对象,然后遍历工作表,单元格等,读取数据并将其转化为Java对象。例如,如果Excel中的每一行代表一个用户对象,我们可以通过循环遍历行和列,构建User对象并填充属性。 对于CSV...

    memoryutil:util报告Java对象的内存

    `memoryutil` 是一个实用工具,专门用于报告Java对象在内存中的使用情况。这个工具可以帮助开发者深入理解对象内存占用,从而进行更有效的内存优化。 首先,Java内存主要分为三个区域:堆内存(Heap)、栈内存...

    xml报文和java对象互相转换 相关jar包和测试代码

    xml报文和java对象互相转换 相关jar包和测试代码,可以与castor插件java对象和XML自动绑定maping文件生成和java对象一键生成工具1.2(https://download.csdn.net/download/kemoing/10864595)完美配合使用

    Java 面向对象 练习题与答案

    Java 面向对象编程练习题与答案 本资源摘要信息涵盖了 Java 面向对象编程的多个知识点,包括 Font 类、Toolkit 类、包机制、抽象类、数组操作等。 1. Font 类: Font 类是 Java 中的一个类,用于设置程序中的字体...

    json转对象(java 多级嵌套)

    除了将JSON转换为Java对象,我们还可以使用`ObjectMapper`将Java对象转换回JSON字符串,这对于前端展示或存储数据非常有用: ```java String json = mapper.writeValueAsString(outerObject); ``` 6. **异常...

    Java面向对象程序设计(第二版)

    不过,我可以基于《Java面向对象程序设计(第二版)》这个标题和标签,来详细说明Java面向对象程序设计中可能涵盖的知识点。 在深入介绍之前,首先需要明确面向对象程序设计(OOP)是一种编程范式,它使用“对象”...

    json转对象数组与对象数组转json --Java

    ### JSON转对象数组与对象数组转JSON(Java) 在Java编程语言中,处理JSON数据时经常需要进行JSON字符串与Java对象之间的转换。特别是在涉及到数组或集合的场景下,这种转换显得尤为重要。本文将详细介绍如何使用...

    JAVA面向对象程序设计(期末考试试题及答案).zip

    在Java编程语言中,面向对象程序设计(Object-Oriented Programming, OOP)是一种核心的编程范式,它基于“对象”概念,将数据和处理数据的方法封装在一起,以实现代码的模块化和可重用性。这个压缩包文件"JAVA面向...

    完成Java面向对象程序设计实验课的心得体会

    在Java面向对象程序设计实验课的学习过程中,我深入体验了Java语言的强大特性和它在软件开发中的重要地位。Java作为一种面向对象的语言,它的核心概念包括抽象、封装、继承和多态,这些特性使得Java在软件工程中具有...

    《Java面向对象编程》电子书+实例源代码+课后题答案.part10

    本资源包含《Java面向对象编程》的电子书,实例源代码,课后题答案等可以说是当前该书最全的资源了。。。 PS:本资源共计18个分卷,后8个分卷虽也已上传却始终显示不出来。我只能换名重发资源。后续分卷改名为《Java...

    关于java对象池的例子代码

    Java对象池是一种优化资源管理的技术,它通过复用已经创建并初始化过的对象,避免了频繁地创建和销毁对象带来的性能开销。在Java中,对象池通常用于数据库连接、线程、Socket等昂贵资源的管理。下面我们将深入探讨...

    Java与UML面向对象程序设计.pdf

    《Java与UML面向对象程序设计》的前4章介绍了面向对象的精髓,第1章是关于对象的简介。第2章介绍了面向对象的基本概念以及UML的一些基本知识。第3章阐述了如何使用Java来编写面向对象程序。第4章介绍面向对象的分析...

    Java中颜色的String和Color对象之间的互相转换

    在 Java 中,我们可以使用 `java.awt.Color` 类来表示颜色,该类提供了多种构造函数,可以根据不同的参数创建颜色对象。例如,我们可以使用 `Color(int r, int g, int b)` 构造函数根据红、绿、蓝三个分量的值创建...

    Java通过JNI和c++对象互传

    * 使用JNI可以实现Java代码和C++代码之间的对象传递。 * 在Java代码中,可以使用native方法来调用C++代码。 * 在C++代码中,可以使用JNI来实现native方法的实现。 * `javah`工具可以生成JNI头文件。 * JNI头文件定义...

    java序列化对象传给php

    android(包括java)序列化一个对象传给php去做处理,或是接到php的序列化的对象在java中做处理的工具jar包以及使用方法. 使用方法: byte[] b = null; b = PHPSerializer.serialize(一个对象);//将一个对象序列化后返回...

    Java语言面向对象程序设计实验指导与习题答案

    通过《Java语言面向对象程序设计实验指导与习题答案》这本书,读者可以系统地学习和掌握这些Java编程的核心知识点,并通过实践来巩固理论知识,进一步提升编程技能。书中的习题答案则为读者提供了自我检验和提升的...

    面向对象编程C++和Java比较教程 中英文完整版 pdf

    C++的模板允许泛型编程,可以在编译时生成针对不同类型的代码,而Java的泛型是在运行时检查类型安全性的。 在异常处理方面,C++使用try-catch-finally结构,而Java也有类似的try-catch-finally语句块,但Java还引入...

    《Java面向对象编程》实例源代码

    通过这些源代码实例,我们可以深入探究Java语言的精髓,包括类、对象、封装、继承和多态等核心特性。 1. **类与对象**:在Java中,类是对象的蓝图,定义了对象的属性和行为。源代码中的示例会展示如何创建和使用类...

    java对象List,Map转json格式

    1. **Java JSON库**: 在Java中,我们可以使用多种库来实现对象到JSON的转换,如Jackson、Gson、Fastjson等。这里以广泛使用的Jackson库为例,它提供了方便的API用于处理JSON操作。 2. **Jackson库**: Jackson库包含...

    java 面向对象 案例 合集

    java 面向对象 案例 合集java 面向对象 案例 合集java 面向对象 案例 合集java 面向对象 案例 合集java 面向对象 案例 合集java 面向对象 案例 合集java 面向对象 案例 合集java 面向对象 案例 合集java 面向对象 ...

Global site tag (gtag.js) - Google Analytics