我尝试测量A类的一个实例的大小:
package pkg;
class A {
private int i;
}使用VisualVm的结果是20个字节:

但是使用JOL的结果是16个字节:
pkg.A object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 12 (object header) N/A
12 4 int A.i N/A
Instance size: 16 bytes
Space losses: 0 bytes internal + 0 bytes external = 0 bytes total下面是我在这个测试中使用的完整代码:
package pkg;
import org.openjdk.jol.info.ClassLayout;
import static java.lang.System.out;
public class Main {
public static void main(String[] args) throws InterruptedException {
A a = new A();
out.println(ClassLayout.parseClass(A.class).toPrintable());
}
}
class A {
private int i;
}我是否误用了这个工具或曲解了它的结果?我原以为这两种工具的结果是一样的。
发布于 2018-03-08 20:14:49
你可能不会喜欢..。但是VisualVM说谎,就像这里解释的那样(有一段来自同样伟大的Shipilev的更深入的视频,但我似乎找不到)
相信JOL,它正确地显示了结果。
发布于 2017-10-22 12:06:50
因为您正在使用ClassLayout.parseClass(A.class)。
如果要测量a (A实例)的内存利用率,请尝试
ClassLayout.parseInstance(a).toPrintable()https://stackoverflow.com/questions/46873619
复制相似问题