java - -XX :+StressLCM, -XX:+JVM 的 StressGCM 选项

标签 java jvm jvm-hotspot java-12

在玩一些 jcstress 代码时,我注意到两个对我来说很新的参数:StressLCMStressGCM

我要做的第一件事就是在源代码本身中搜索这些,虽然我已经找到了一些东西,但仍然不清楚它们实际上做了什么。我真的很希望能在源代码中看到一些注释,这会带来一些启示,但没有运气。

我还找到了 bug description添加了这些,但解释对我来说没有意义:

Randomize instruction scheduling in LCM/GCM.

如果可能的话,有人可以用通俗易懂的英语解释一下他们的工作吗?

最佳答案

LCM/GCM 代表局部代码运动/全局代码运动。为了优化 CPU 利用率,编译器可能会在不更改代码语义的情况下重新排序独立指令。编译器试图找到最佳的(从性能角度)指令顺序。这称为指令调度,LCM/GCM 就是这样做的。

使用 -XX:+StressLCM/-XX:+StressGCM 选项,指令调度的工作方式有点不同。它不再试图找到最佳调度,而是在允许的约束范围内选择随机指令顺序,仍然保持原始语义不变。这种不确定的行为有助于测试更多的指令交错组合,这对于发现微妙的并发问题至关重要。

关于java - -XX :+StressLCM, -XX:+JVM 的 StressGCM 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56273136/

相关文章:

Java:重复调用函数时性能提升的原因是什么?

java - 在java中,这样的类类型编译成什么?

java - 获取祖先类的泛型类

java - Java 虚拟机在执行多个 Java 应用程序时会做什么

java - 简单的 CLI Java 程序不断消耗越来越多的内存

java - 如何解释实例的标记词?

java - 为什么在静态初始化器中使用并行流会导致不稳定的死锁

java - 具有接口(interface)参数的反射和构造函数

java - SBT 不会编译 HelloWorld ScalaFX 示例,提示类路径中缺少 javafx

performance - 优化elasticsearch/JVM