我们可以通过Unsafe类中的实例方法sizeOf()来获取对象的大小。 importsun.misc.Unsafe;publicclassObjectSizeFetcher{privatestaticUnsafeunsafe;static{Fieldfield=Unsafe.class.getDeclaredField("theUnsafe");field.setAccessible(true);unsafe=(Unsafe)field.get(null);}publicstaticlonggetObjectSize(Objectobj){returnunsaf...
importjava.lang.management.ManagementFactory;importjava.lang.management.MemoryMXBean;publicclassObjectSizeFetcher{privatestaticMemoryMXBeanmemoryMXBean;static{memoryMXBean=ManagementFactory.getMemoryMXBean();}publicstaticlonggetObjectSize(Objectobject){memoryMXBean.gc();returnmemoryMXBean.getObjectPendingFinalization...
packagesizeof;importjava.lang.instrument.Instrumentation;publicclassObjectShallowSize {privatestaticInstrumentation inst;publicstaticvoidpremain(String agentArgs, Instrumentation instP){ inst=instP; }publicstaticlongsizeOf(Object obj){returninst.getObjectSize(obj); } } 定义META-INF/MANIFEST.MF文件 Premain-...
首先创建代理类 packagecom.dingtongblog.size;importjava.lang.instrument.Instrumentation;publicclassObjectSize {privatestaticvolatileInstrumentation instru;publicstaticvoidpremain(String args, Instrumentation inst) { instru=inst; }publicstaticLong getSizeOf(Object object) {if(instru ==null) {thrownewIllegalSta...
public double getFromByteSize(long byteSize) { return byteSize*1.0/1024/1024/1024; } }; public abstract double getFromByteSize(long byteSize); } /** * 默认 * 返回bytes * @param o * @return */ public static double getObjectSize(Object o,SizeEnum sizeEnum){ ...
Premain-class: pac.testcase.utils.ObjectSizeUtils Can-Redefine-Classes: false 1. 2. 随便写一个实体类,用来测试: classPerson{privateStringname;privateStringlife;publicStringgetName(){returnname;}publicvoidsetName(Stringname){=name;}publicStringgetLife(){returnlife;}publicvoidsetLife(Stringlife){this...
Size of any Object reference */20privatestaticfinal int objectRefSize;21static{22try{23Field field=Unsafe.class.getDeclaredField("theUnsafe");24field.setAccessible(true);25unsafe=(Unsafe)field.get(null);2627// 可以通过Object[]数组得到oop指针究竟是压缩后的4个字节还是未压缩的8个字节28objectRef...
实现一个sizeof获取Java对象大小 由于Java的设计者不想让程序员管理和了解内存的使用,我们想要知道一个对象在内存中的大小变得比较困难了。本文提供了可以获取对象的大小的方法,但是由于各个虚拟机在内存使用上可能存在不同,因此该方法不能在各虚拟机上都适用,而是仅在hotspot 32位虚拟机上,或者其它内存管理方式与...
public class InstrumentationExample { public static void printObjectSize(Object object) { System.out.println("Object type: " + object.getClass() + ", size: " + InstrumentationAgent.getObjectSize(object) + " bytes"); } public static void main(String[] arguments) { String emptyString = ""...
public class SizeOfAgent { private static Instrumentation inst; /** initializes agent */ public static void premain(String agentArgs, Instrumentation instP) { inst = instP; } /** * Returns object size without member sub-objects. * @param o object to get size of ...