[Java] 计算Java对象大小】的更多相关文章

1.通过util.zip带的gzip压缩程序  Coherence对象压缩程序如下 package coherencetest; import com.tangosol.net.CacheFactory; import java.util.zip.*; import java.io.*; import com.tangosol.net.CacheFactory;import com.tangosol.net.ConfigurableCacheFactory;import com.tangosol…
这篇说说如何计算Java对象大小的方法.之前在聊聊高并发(四)Java对象的表示模型和运行时内存表示 这篇中已经说了Java对象的内存表示模型是Oop-Klass模型. 普通对象的结构如下,按64位机器的长度计算 1. 对象头(_mark), 8个字节 2. Oop指针,如果是32G内存以下的,默认开启对象指针压缩,4个字节 3. 数据区 4.Padding(内存对齐),按照8的倍数对齐 数组对象结构是 1. 对象头(_mark), 8个字节 2. Oop指针,如果是32G内存以下的,默认开启对…
摘要 本文以如何计算Java对象占用内存大小为切入点,在讨论计算Java对象占用堆内存大小的方法的基础上,详细讨论了Java对象头格式并结合JDK源码对对象头中的协议字段做了介绍,涉及内存模型.锁原理.分代GC.OOP-Klass模型等内容.最后推荐JDK自带的Hotspot Debug工具——HSDB,来查看对象在内存中的具体存在形式,以论证文中所述内容. 背景 目前我们系统的业务代码中大量使用了LocalCache的方式做本地缓存,而且cache的maxSize通常设的比较大,比如10000…
由于在项目中需要大致计算一下对象的内存占用率(Hadoop中的Reduce端内存占用居高不下却又无法解释),因此深入学习了一下如何准确计算对象的大小. 使用system.gc()和java.lang.Runtime类中的freeMemory(),totalMemory(),maxMemory()这几个方法测量Java对象的大小,这种方法的优点是数据类型大小无关的,不同的操作系统,都可以得到占用的内存,但经常我们手动调用的GC并未起到预期的效果,计算得不够精确. 又有人想将对象进行序列化之后的by…
如何准确计算Java对象的大小 原创文章,转载请注明:博客园aprogramer 原文链接:如何准确计算Java对象的大小      有时,我们需要知道Java对象到底占用多少内存,有人通过连续调用两次System.gc()比较两次gc前后内存的使用量在计算java对象的大小,也有人根据Java虚拟机规范中的Java对象内存排列估算对象的大小,这两种方法或多或少都有问题,因为System.gc()并不一定促发GC,同一个类型的对象在32位与64位JVM中使用的内存会不一样,在64位虚拟机中是否开…
之前想研究一下unsafe类,碰巧在网上看到了这篇文章,觉得写得很好,就转载过来.原文出处是: http://blog.csdn.net/iter_zc/article/details/41822719 1 基础知识 普通对象的结构如下,按64位机器的长度计算 1. 对象头(_mark), 8个字节 2. Oop指针,如果是32G内存以下的,默认开启对象指针压缩,4个字节 3. 数据区 4. Padding(内存对齐),按照8的倍数对齐 数组对象结构是 1. 对象头(_mark), 8个字节 2…
在java中,基本数据类型的大小是固定.但是java对象的大小是不固定的,需要通过计算. 在java中,一个空对象(没有属性和方法的对象)在堆中占用8byte,比如 Object obj = new Object();另外栈中存储引用需要占用4byte的空间,总共需要16byte空间(喂,为为什么不是12byte?因为java在内存分配的时候都是以8的倍数在分配).在java中所有的对象都继承Object,所以不论什么样的对象大小都不能小于8byte. 计算一下下面的对象的大小? Class O…
一个对象占多少字节? 关于对象的大小,对于C/C++来说,都是有sizeof函数可以直接获取的,但是Java似乎没有这样的方法.不过还好,在JDK1.5之后引入了Instrumentation类,这个类提供了计算对象内存占用量的方法.至于具体Instrumentation类怎么用就不说了,可以参看这篇文章如何精确地测量java对象的大小. 不过有一点不同的是,这篇文章使用命令行传入JVM参数来指定代理,这里我通过Eclipse设置JVM参数: 后面的是我打的agent.jar的具体路径.剩下的就…
最近看到网上很多文章讲如何计算java对象的大小(size),很多观点不敢苟同. 这是其中一篇比较靠前的文章,写的也比较全面: http://blog.csdn.net/iter_zc/article/details/41822719/ 认真拜读了一下,有些收获,也有一些疑问. 按照“字节对齐”的理论,所有java对象的大小应该是8的整数倍,且对象头会有8+4=12个字节 下面写了两个类进行验证: 代码中SizeOfAgent是文中讲到的通过Instrumentation.getObjectSi…
一个对象占多少字节? 关于对象的大小,对于C/C++来说,都是有sizeof函数可以直接获取的,但是Java似乎没有这样的方法.不过还好,在JDK1.5之后引入了Instrumentation类,这个类提供了计算对象内存占用量的方法.至于具体Instrumentation类怎么用就不说了,可以参看这篇文章如何精确地测量java对象的大小. 不过有一点不同的是,这篇文章使用命令行传入JVM参数来指定代理,这里我通过Eclipse设置JVM参数: 后面的是我打的agent.jar的具体路径.剩下的就…