- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在优化一个特定的方法,不幸的是它被 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/
我目前正在优化一个特定的方法,不幸的是它被 JVM 内联,这会阻止它被正确地向量化。我注意到有一个注释禁止内联,即 jdk.internal.vm.annotation.DontInline .但是,
我是一名优秀的程序员,十分优秀!