问题标签 [jol]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
226 浏览

java - HashMap 的 jol 足迹

我对对象足迹理解有疑问:

我在两种情况下运行以下行AB

案例A的结果是:

案例 B 结果是:

A 和 B 之间的差异是 128 个 Integer 实例(1872 与 2000)。第一个假设是一种IntegerCache影响,但在我看来它并不能解释案例 B。

问题:为什么这两个脚印不同?

细节:

0 投票
1 回答
2054 浏览

java - 如何在 Java 9 上运行 jol?

我正在尝试使用jolJava 9 运行一个程序,但没有运气。

我在以下依赖项pom.xml

程序很简单:

模块描述符:

当我从 IDEA 运行程序时,我看到以下输出:

-Djdk.attach.allowAttachSelf=true在 IDEA 中添加了 VM 参数,但没有帮助(仍然是相同的输出)。

PS我可以从类路径成功运行程序。尽管如此,如何从模块路径运行它还是很有趣的。

0 投票
2 回答
381 浏览

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

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

使用 VisualVm 的结果是 20 个字节: 在此处输入图像描述

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

这是我用于此测试的完整代码:

我是否滥用了这些工具或误解了它的结果?我期望这两种工具都能得到相同的结果。

0 投票
2 回答
531 浏览

java - 为什么即使每个字段都是 4 字节对齐的,Java 对象中也会存在内部碎片?

介绍:

我使用JOL(Java Object Layout)工具来分析 Java 对象的内部和外部碎片以用于研究目的。

这样做时,我偶然发现了以下内容:

问题:

在这种情况下困扰我的是每个字段都是 4 字节对齐的(参见 OFFSET 列),但仍然在偏移量 56 处添加了对齐间隙(56 8 (alignment/padding gap))。我在 Java 9 中进行了相同的测试,对象布局发生了一些变化,对齐/填充间隙仍然存在,但甚至有 12 个字节大。

为什么会这样?为什么它有 8 个字节大,我看到的所有其他对象都是 4 个字节的内部对齐?我自己找不到解释。

我的系统:

使用默认设置(带有压缩 oops 的 ParallelOldGC)

0 投票
1 回答
284 浏览

java - java.lang.Integer 对象布局及其开销

我使用了一个名为JOL(Java Object Layout)的工具,它试图分析对象布局。它带有一个cli,我用它来分析java.lang.Integer。我看到 Integer 对象占用了 12 个额外的字节作为开销。该开销可以是对象所属类的地址的 4 个字节,另外 4 个用于垃圾收集,但是剩下的 4 个字节呢?我知道对象有一个整数 hashCode 值,但我不认为它是唯一的(即它不使用内存位置,而是使用原始值),因为:

日志:

0 投票
1 回答
998 浏览

java - 内存中的 Java 原始数组布局

这是我想提出问题的两个示例(假设您在JOL这里):

还有一个使用这个的例子:

这是两个输出:

我主要了解输出,我不了解的是这些:

一般来说,对象是8 bytes对齐的,那么为什么需要添加比需要更多的填充?

我知道一些奇怪的事情,第一个与 JOL 正在使用的 API 有关,第二个与需要隐藏的内部数据有关

我也知道这一点,但它似乎无关,因为它意味着内部填充

有人可以对此有所了解吗?

0 投票
2 回答
232 浏览

java - OpenJ9 VM 对象布局

OpendJDK 有一个Java 对象布局 (JOL)工具,它允许估计指定对象的实例实际内存大小。它可以显示 HotSpot 的对象布局,但在 OpenJ9 中是否相同?

0 投票
1 回答
126 浏览

java - 为什么对象调用 toString() 会影响对象头的输出?我正在使用 jol 包

L的代码很简单

取消注释,再次运行代码会导致不同的结果,或者两个完全不同的结果。我想知道这个结果的原因是什么?不仅调用 toString() 会影响结果,而且在对象上调用其他方法也会影响结果,例如 hashCode()

toString() 评论后

0 投票
1 回答
633 浏览

java - UseCompressedOops UseCompressedClassPointers 在 jdk-13 和 jdk-15

无意间,我偶然发现了一个jdk-15我不知道的变化。假设我有一个非常简单的问题:3 个整数数组的大小是多少?为此,我使用JOL。代码相当简单:

我运行这个jdk-13

我得到输出:

这很明显:

运行此示例jdk-15会产生相同的输出,相同32 bytes。预期的...


对于第二部分,我想禁用 JVM 优化:-XX:-UseCompressedOops. 我运行这个jdk-13

好吧,也有点预期:

现在让我们运行相同的示例jdk-15

为什么是32 bytes现在?怎么不40一样了jdk-13

0 投票
0 回答
111 浏览

java - 运行 jol-core 异常,异常消息是“进程完成,退出代码 137(被信号 9 中断:SIGKILL)”

我正在努力解决这个问题,我可以得到你的帮助。

运行环境:

运行代码:

控制台输出结果

我只是想做一个简单的测试,结果导致了这个问题,请帮助我