据我所知,没有明确的规则可以确定Java方法是否会在调用时被JIT或解释。 那么是否有某种方式告诉JVM我需要一个特定的JITed方法。有没有办法确定哪种方法是JITed,哪种方法不是。
答案 0 :(得分:5)
据我所知,你不知道(来自JVM内部)并且不能强制执行JITed的方法,但是使用-XX:+PrintCompilation
JVM参数你可以看到JIT编译器正在进行它的工作和检查如果一个方法在该程序的特定运行中得到JITed。
答案 1 :(得分:1)
因此,有人告诉JVM我需要某种方法进行JIT。
不,哪些方法是“JITed”而不是由你决定,事实上,不能保证任何方法都会被JIT。我建议你把这些决定留给JVM。
答案 2 :(得分:0)
有没有办法确定 哪个方法将被JITed和哪个 不
(Oracle)Sun JVM称为HotSpot,这意味着它会查看哪些方法被调用最多,从而变得“热”,并且这些方法是第一个被编译的方法。所以有些方法可能永远不会被编译。但是如果你知道这个方法被大量调用,很可能会被编译。您可以使用-XX:CompileThreshold=10000
VM选项设置阈值,该选项指定将方法视为“热”所需的调用次数。
我不知道检查当前代码是以解释模式还是编译模式运行的任何方法。 VM崩溃日志显示堆栈跟踪中的哪些方法被解释或编译,也许有一些方法可以在运行时获取它。
答案 3 :(得分:0)
有一种方法可以让jvm编译一个类,但不能保证做任何事情,但应该对任何有jit的jvm都有效。
Compiler.compileClass(MyClass.class);
答案 4 :(得分:0)
你无法分辨,并且没有任何办法可以阻止HotSpot中的错误。 “JIT”一词至少已过期十年。