gpt4 book ai didi

java - 如何使用 HotSpot JVM @DontInline 注解?

转载 作者:行者123 更新时间:2023-12-04 02:28:00 26 4
gpt4 key购买 nike

我目前正在优化一个特定的方法,不幸的是它被 JVM 内联,这会阻止它被正确地向量化。我注意到有一个注释禁止内联,即 jdk.internal.vm.annotation.DontInline .但是,不能从默认模块访问它。
是否有一种干净的方法可以访问此注释或以其他方式防止违规方法的内联?

最佳答案

DontInline , ForceInline等是JDK内部注解,不能应用于用户代码。即使你设法打开了这些注解,HotSpot JVM 也有 explicit check禁止他们进入非特权阶层。
原因是可以理解的。这些注解是特定 JVM 版本的实现细节; JDK 开发人员可以在不另行通知的情况下随意添加/删除/更改此类注释的含义,即使是在 JDK 小更新中也是如此。
使用 @DontInline无论如何,强制矢量化似乎不是一个好方法。一般来说,内联不应该阻止其他优化。如果您遇到此类问题,最好在 hotspot-compiler-dev 上报告问题邮件列表。

现在好消息。
从 JDK 9 开始,有一个公共(public)支持的 API 可以手动调整 JIT 编译器。这是JEP 165: Compiler Control .
想法是在单独的 JSON 文件中提供编译器指令,并使用 -XX:CompilerDirectivesFile=<file> 启动 JVM选项。如果您的应用程序对某些编译器决策敏感,您可以随应用程序一起提供指令文件。

{
match: "*::*",
inline: "-org/package/MyClass::hotMethod"
}
甚至可以使用 DiagnosticCommand API 在运行时以编程方式应用编译器指令:
ManagementFactory.getPlatformMBeanServer().invoke(
new ObjectName("com.sun.management:type=DiagnosticCommand"),
"compilerDirectivesAdd",
new Object[]{new String[]{"compiler.json"}},
new String[]{"[Ljava.lang.String;"}
);
对了,有 Vectorize: true指令列表中的选项,这可能有助于向量化特定方法。

关于java - 如何使用 HotSpot JVM @DontInline 注解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66117877/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com