gpt4 book ai didi

java - 除了 java.lang.Compiler 之外,有没有办法手动触发 JIT

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:32:18 25 4
gpt4 key购买 nike

我正在尝试基于方法结构和分析信息(由 JVM 提供)构建 JIT 策略,但我无法手动触发 JIT。 This documentation说我可以通过调用 java.lang.Compiler.compileClass() 来运行 JIT,但是方法每次都返回 false 并且 java.lang.Compiler 检查的属性(java.compiler ) 每次我运行 JVM 时都是空的。我在 OpenJDK 和 Oracle JVM 1.7 上试过,结果都一样。

但是当我用

观察编译统计数据时
$ jstat -printcompilation <PID>

我可以看到 JIT 成功编译了一些符合条件的方法。

如果存在任何方式,我宁愿从 Java 代码中触发它。我试图在 hotspot VM's code 中搜索也是,但我找不到做出决定和 JIT 开始的类和方法。

编辑:环顾四周后,我发现了 compilationPolicy.cpp bu 仍然无法找到决策所依赖的确切位置。我会期待类似(简单地思考)

if(hot_count > Threshold){
compile_method(methodHandle);
}

却发现了这个,

void SimpleCompPolicy::method_invocation_event(methodHandle m, JavaThread* thread) {
const int comp_level = CompLevel_highest_tier;
const int hot_count = m->invocation_count();
reset_counter_for_invocation_event(m);
const char* comment = "count";

if (is_compilation_enabled() && can_be_compiled(m)) {
nmethod* nm = m->code();
if (nm == NULL ) {
// [MY COMMENT] no check being done on hot_count in here or callee methods
CompileBroker::compile_method(m, InvocationEntryBci, comp_level, m, hot_count, comment, thread);
}
}
}

至于跟踪 native JVM 代码,我已经离开了我的主题。 仍在寻找在代码的 Java 端使用的简单解决方案

最佳答案

听起来您想要类似于编译器控制功能 (http://openjdk.java.net/jeps/165) 的东西。

不幸的是,它还不存在,尽管它目前计划成为 Java 9 的一部分。

关于java - 除了 java.lang.Compiler 之外,有没有办法手动触发 JIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27671959/

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