首先创建代理类 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 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 = "";...
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-...
> clazz = Class.forName("AgentTools"); Method method = clazz.getMethod("sizeOf", Object.class); long size = (long) method.invoke(null, 1) ; System.err.println(size); } 1. 2. 3. 4. 5. 6. 7. 启动指定javaagent参数: -javaagent:F:\eclipse-pro\uckj-git-pro\hadluo-test\src\m...
publicclassObjectSizeFetcher{publicstaticlonggetObjectSize(Objectobj){try(ByteArrayOutputStreambaos=newByteArrayOutputStream();ObjectOutputStreamoos=newObjectOutputStream(baos)){oos.writeObject(obj);returnbaos.toByteArray().length;}catch(IOExceptione){thrownewRuntimeException("Unable to get object size",...
public int getBits() { return bits; } } /** * 计算obj对象在虚拟机中所占的内存,单位为bit。 * 如果isPapa为true,则表明计算的是obj对象父类定义的属性。 * * @param obj * @param clazz * @param isPapa * @return */ private static int getObjBits(Object obj, Class<?> clazz, boolean ...
public static double getObjectSize(Object o,SizeEnum sizeEnum){ long byteSize = 0; if(o instanceof Collection<?>){ byteSize = RamUsageEstimator.sizeOfAll(o); }else{ byteSize = RamUsageEstimator.sizeOf(o); } return sizeEnum.getFromByteSize(byteSize); ...
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...
ThreadLocal类提供set/get方法存储和获取value值,但实际上ThreadLocal类并不存储value值,真正存储是靠ThreadLocalMap这个类,ThreadLocalMap是ThreadLocal的一个静态内部类,它的key是ThreadLocal实例对象,value是任意Object对象。 1、ThreadLocal类set方法 先来看一下ThreadLocal的set()方法的源码是如何实现的: ...
toString方法是我们比较常用的方法, 在Object中的默认实现返回一个 类名+'@'+hasCode的16进制拼接的字符串; public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } 注意到toString方法是没有被final修饰的, 证明他可以被子类重写; ...