首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么VisualVm和JOL工具给出了不同的对象大小结果

为什么VisualVm和JOL工具给出了不同的对象大小结果
EN

Stack Overflow用户
提问于 2017-10-22 11:39:26
回答 2查看 501关注 0票数 2

我尝试测量A类的一个实例的大小:

代码语言:javascript
复制
package pkg;
class A {
    private int i;
}

使用VisualVm的结果是20个字节:

但是使用JOL的结果是16个字节:

代码语言:javascript
复制
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

下面是我在这个测试中使用的完整代码:

代码语言:javascript
复制
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;
}

我是否误用了这个工具或曲解了它的结果?我原以为这两种工具的结果是一样的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-08 20:14:49

你可能不会喜欢..。但是VisualVM说谎,就像这里解释的那样(有一段来自同样伟大的Shipilev的更深入的视频,但我似乎找不到)

相信JOL,它正确地显示了结果。

票数 1
EN

Stack Overflow用户

发布于 2017-10-22 12:06:50

因为您正在使用ClassLayout.parseClass(A.class)

如果要测量a (A实例)的内存利用率,请尝试

代码语言:javascript
复制
ClassLayout.parseInstance(a).toPrintable()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46873619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档