我知道JVM需要一段时间来“预热”,具体取决于代码大小。我的问题是:程序员是否有办法通过指定代码的可能部分来帮助加速“预热”过程?
答案 0 :(得分:2)
您可以通过多次调用代码来间接进行。默认-xx:CompileThreshold=
为10000.因此您可以多次调用关键代码,例如12,000次。
你可以降低编译门槛,但你仍然有同样的问题,只是循环可以说是1000而不是10000。
您希望对代码进行预热的一个原因是优化代码,但如果缩短迭代次数,可能无法执行某些优化,并且您可以获得次优调用(但并非总是如此)
然后,如果你热身,代码是一种不具代表性的方式,它可以以次优的方式优化它,JVM可能决定稍后重新优化它。
答案 1 :(得分:0)
您可能需要考虑提前编译器,例如: gcj,它允许您在构建应用程序时将一组类编译为本机代码,并且仅在虚拟机中运行运行时加载的类。编译完成后的性能不是很好(特别是如果你在运行时加载的代码中花费了很多时间),但是对于运行时间短的程序,预编译的好处远远超过了这个。
答案 2 :(得分:0)
关于Java中的微观性能测量,developerWorks上有一个非常好的article。它还涉及“热身”和其他相关事项的主题。作者在Java中实现了一个非常好的微基准测试框架。该框架还处理JVM的预热阶段,并尝试加速并在实际测试开始之前完成它。框架的源代码也可用,因此您可以查看如何实现它。