`
zhang_xzhi_xjtu
  • 浏览: 536724 次
  • 性别: 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.----------
----------------------------------------------------------------



分享到:
评论

相关推荐

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

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

    protobuf文件定义及转化为java对象

    定义protobuf文件(包含enum,message,required,optional,repeated, 结构体定义中引用另一个结构体), 生成java文件,能够构建java对象,并转化为字节byte或者流,能够将流或字节转化为对象

    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实现对象转化为get请求的param参数String字符串

    java实现对象转化为get请求的param参数String字符串,本人自测非常好用,一般对象可以转化键值对的格式,但是最近项目需要自己手动拼接对象作为get请求的参数,百度了一堆还不如自己写一个,欢迎各位使用,有什么...

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

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

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

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

    JSON转换为JAVA对象及日期格式转换处理 -

    JSON转换为JAVA对象及日期格式转换处理 -

    java 对象是否为空的判断

    java 判断对象是否为空.如String,Character,Object[]

    关于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序列化对象传给php

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

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

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

    java 中如何从LIST 对象取值

    在Java编程语言中,列表(List)是一种常用的数据结构,用于存储有序的元素集合。本文将深入探讨如何从List对象中获取数据,包括使用...通过上述示例,相信你已经掌握了如何在Java中从`List`对象中获取数据的关键步骤。

    JAVA面向对象编程(孙卫琴)(带完整书签版,课后答案,源代码).z03

    JAVA面向对象编程(孙卫琴)(带完整书签版,课后答案,源代码) 最好的JAVA入门书籍 讲解全面,透彻 需要单独下载课后答案和源代码的在本人资源中可以找到,欢迎下载 本压缩包共分为6个部分,这里为第三部分。

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

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

    java用面向对象的方法计算三角形、圆、矩形的面积和周长

    通过以上分析,我们可以看到这个项目是如何利用Java的面向对象特性来组织和实现几何形状计算的。每个类都负责其对应的形状,并提供了统一的接口供外部调用,这种设计模式使得代码结构清晰,易于维护和扩展。同时,...

Global site tag (gtag.js) - Google Analytics