首页 > 解决方案 > 这些奇怪的布尔值在 JMH 中是用来做什么的?

问题描述

我写了一个关于指令成本的JMH 测试new,并检查了它生成的类文件。generated除了通常的类,文件夹中有大量的派生类:

类文件

这真的让我很震惊,因为很少的注释就会导致这么多的类通过继承绑定在一起。我很好奇这些类中有什么东西,所以我使用了一个反编译工具(顺便说一句,我从 KotlinConf 2019 上的一次演讲中学到了这个工具)procyon来反编译这些生成的类,其中大部分是与控制相关的,比如测量时间(它们是明确指定不能内联)并收集指标。但是这些类中有很多奇怪的布尔值:

一个类文件只包含布尔值

其他生成的类文件中也有许多布尔值。我用谷歌搜索了这个,似乎它们在某种程度上来自JMH 源代码。所以我想问一下这些布尔值是做什么用的?我将假设它们与 JMH 的工作原理密切相关......似乎没有关于 JMH 源代码中的布尔值的评论。

另外,关于改进我从一开始提到的 JMH 测试的任何建议......?我知道测试这样的东西可能非常棘手和脆弱,所以我不知道它们是否准确或足够可靠。

非常感谢。

标签: javaperformancedecompilingjmh

解决方案


只是猜测。

如您所见,布尔值是私有的并且在源文件中未使用。它们可能会通过反射在某处使用,但我敢打赌它们不是。所以剩下的唯一事情就是确保markerBegin和其他字段属于不同的缓存,以防止虚假共享


推荐阅读