我目前感兴趣的问题是分析/优化一些代码。使用 Java 进行分析的一般建议是“运行”、“等待热点 JIT 编译器完成其工作”、“重复测试”......
所以问题是
- 我应该等待热点启动并完成其工作多长时间?
- 当 CPU 相当饱和时(由其他线程),JIT 会运行吗?- 在现实生活中可能会发生该进程不断将 CPU 加载到 100%。
- 需要执行多少次相同的代码来识别“热点”?
- 是否有可能以某种方式神奇地(可能使用 Oracle JVM 的一些专有 API)来触发某些类的 JIT 编译?
我目前感兴趣的问题是分析/优化一些代码。使用 Java 进行分析的一般建议是“运行”、“等待热点 JIT 编译器完成其工作”、“重复测试”......
所以问题是
我应该等待热点启动并完成其工作多长时间?
大约 10,000 次调用/迭代和几毫秒。
当 CPU 相当饱和时(由其他线程),JIT 会运行吗?- 在现实生活中可能会发生该进程不断将 CPU 加载到 100%。
是的,这可能需要更长的时间,但是以 100% 的 CPU 执行测试通常是一个好主意,因为结果不太可能代表您在生产中所做的事情。
需要执行多少次相同的代码来识别“热点”?
我会等到代码在可能的情况下预热。真实的测试数据、高 CPU 利用率的几秒钟和一个体面的分析器通常就足够了。
是否有可能以某种方式神奇地(可能使用 Oracle JVM 的一些专有 API)来触发某些类的 JIT 编译?
除了运行它足够的次数之外。过早编译类会导致次优代码。代码根据其使用方式进行了优化。JRockit(也归 Oracle 所有)拥有/拥有这样的功能。