`
zhang_xzhi_xjtu
  • 浏览: 538680 次
  • 性别: 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通过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 面向对象编程.pdf

    《Java 面向对象编程》内容由浅入深,紧密结合实际,利用大量典型实例,详细讲解Java面向对象的编程思想、编程语法和设计模式,介绍常见Java类库的用法,总结优化Java编程的各种宝贵经验,深入阐述Java虚拟机执行...

    实用Java教程(书上源代码)基于BlueJ的对象优先方法(第三版)

    《实用Java教程(书上源代码)基于BlueJ的对象优先方法(第三版)》是一本深受Java初学者欢迎的教材,由David J. Barnes和Michael Kolling共同编写,并得到了Java之父James Gosling的倾情推荐。这本书的核心理念是通过...

Global site tag (gtag.js) - Google Analytics