我试图在Java HotSpot VM中使用C1来查看标准JIT编译的结果,而不是OSR。我已使用-XX:-UseOnStackReplacement
关闭OSR,并使用-XX:TieredStopAtLevel=1
将编译限制为C1。但是现在我的方法根本没有被编译。我已打开“打印编译”,如果我允许它使用OSR,则可以很好地记录编译。同样,没有OSR的C1文件也没有碰到我的断点。
我正在使用一个非常简单的代码段进行测试
class Demo {
public static void main(String[] args) {
int a = workload();
System.out.println("Calculated answer is: " + a);
}
private static int workload() {
int a = 14;
for (int i = 0; i<100000; i++) {
a = a + i;
}
return a;
}
}
答案 0 :(得分:3)
问题在于您仅调用一次OKCupid.prototype.logout = function(){
request = request.defaults({jar: request.jar()}) // reset the cookie jar
headers.clearOAuthToken(); // just in case
}
并执行多次该循环;您不是多次执行workload
;这是您在这里遇到的主要问题。 workload
可以优化方法,但是这里只有一个循环-因此,除非JIT
处于活动状态,否则没有太多要优化的东西。
这很容易证明,您可以使用以下方法运行方法:
OSR
在获得的输出中,您会看到很多-XX:+UnlockDiagnosticVMOptions
-XX:TieredStopAtLevel=1
-XX:+TraceNMethodInstalls // this is to track the compiled methods
-XX:-UseOnStackReplacement
com.so.jit.OSRCompilation // this is the classname I've used
。
但是,如果您启用了Installing method
:
OSR
您将获得很多-XX:+UnlockDiagnosticVMOptions
-XX:TieredStopAtLevel=1
-XX:+TraceNMethodInstalls // this is to track the compiled methods
-XX:+UseOnStackReplacement
com.so.jit.OSRCompilation // this is the classname I've used
,但一行:
Installing method