有没有一种轻量级的方法可以在Java 9+中添加一个安全点
在Java 9+中是否有更便宜的方法调用来保持其安全点?
JVM在运行时删除了安全点以提高效率,但这会使分析和监视代码变得更加困难。出于这个原因,我们故意在精心挑选的地方添加琐碎的调用,以确保存在安全点。
public static void safepoint() {
if (IS_JAVA_9_PLUS)
Thread.holdsLock(""); // 100 ns on Java 11
else
Compiler.enable(); // 5 ns on Java 8
}
public static void optionalSafepoint() {
if (SAFEPOINT_ENABLED)
if (IS_JAVA_9_PLUS)
Thread.holdsLock("");
else
Compiler.enable();
}
在Java 8上,这个开销很好,但是在Java 9+中得到了优化,因此我们必须使用更昂贵的方法,或者不启用此功能。Compiler.enable()
编辑:除了分析器之外,我还使用它来获取更好的细节,以便应用程序可以分析自身,例如,当执行操作花费的时间太长时。safepoint()
Thread.getStackTrace()