如何在某个时刻强制执行/确保Java热点JIT编译

时间:2013-01-28 20:44:44

标签: java performance jvm-hotspot

我现在感兴趣的问题是分析/优化某些代码。使用Java进行性能分析的一般建议是“运行”,“等待一段时间让热点JIT编译器完成其工作”,“重复测试”......

所以问题是

  • 我等待热点开始并完成工作需要多长时间?
  • 将JIT运行,而CPU相当饱和(由其他线程)? - 它可能在现实生活中发生,该过程不断地将CPU加载到100%。
  • 需要多少次执行同一段代码来识别“热点”?
  • 是否可能以某种方式神奇地(可能使用Oracle JVM的某些专有API)来触发针对证书类的JIT编译?

1 个答案:

答案 0 :(得分:0)

  

我等待热点开始并完成其工作多久了?

大约10,000次调用/迭代和几毫秒。

  

JIT会在CPU相当饱和(其他线程)时运行吗? - 它可能在现实生活中发生,该过程不断地将CPU加载到100%。

是的,它可能需要更长的时间,但是在100%的CPU上执行测试通常是一个好主意,因为结果不太可能代表你在生产中会做什么。

  

需要多少次执行同一段代码来识别“热点”?

我会等到代码尽可能热身。现实的测试数据,高CPU利用率的几秒钟和一个不错的分析器通常就足够了。

  

是否可能以某种方式神奇地(可能使用Oracle JVM的某些专有API)来触发针对证书类的JIT编译?

除了跑足够的次数之外没有。过早编译类可能导致次优代码。代码根据其使用方式进行优化。 JRockit(也归Oracle所有)拥有这样的功能。