对象大小的计算
使用 Instrumentation
javac ObjSizeTool.java
javac ObjSizeDemo.java
jar cvf ObjSizeDemo.jar *.class
Main-Class: ObjSizeDemo
Premain-Class: ObjSizeTool
java -javaagent:ObjSizeDemo.jar -jar ObjSizeDemo.jar
public class ObjSizeDemo {
static class User {
private int age;
private String name;
}
public static void main(String[] args) {
System.out.println(ObjSizeTool.getObjectSize(new User()));
}
}
public class ObjSizeTool {
private static Instrumentation instrumentation;
public static void premain(String args, Instrumentation inst) {
instrumentation = inst;
}
public static long getObjectSize(Object obj) {
return instrumentation.getObjectSize(obj);
}
}
使用 lucene
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>8.6.0</version>
</dependency>
public class ObjSizeDemo {
static class User {
private long id;
private int age;
private String name;
}
public static void main(String[] args) {
System.out.println(RamUsageEstimator.shallowSizeOf(new User()));
System.out.println(RamUsageEstimator.shallowSizeOfInstance(User.class));
}
}