Проблема в том, что вы вызываете 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
, , а также одну строку:
Installing osr method (1) com.so.jit.OSRCompilation.workload()I @ 5