众所周知,HotSpot会分析运行时使用模式和性能特征,然后在Java应用程序运行时根据该分析优化JIT流程。因此,在尝试对Java应用程序进行基准测试时,通常建议谨慎,以便在进行实际性能测量之前允许进行此分析和优化阶段。
我确信之前已经考虑过这个问题,但我常常想知道为什么这个分析阶段(例如典型的使用模式)无法以某种方式在构建过程中完成,然后与应用程序一起部署分析数据以便完整启动应用程序后立即实现-JED JIT。
有没有人知道这是否真的已经完成,是否存在无法解决的原因,或者是否计划将其作为HotSpot和Java应用程序部署的增强功能?
答案 0 :(得分:0)
应用程序没有“典型使用模式”,尤其是在谈论Java应用程序时。它可以在Windows,Linux,MacOS,Solaris等下运行。运行时环境不仅可以完全改变代码的行为,还可以确定哪些类在运行时甚至存在。
例如,具有图形用户界面的应用程序将在Windows,Linux或MacOS下加载不同的AWT实现类。但即使是显示器像素格式(RGB与BGR,16位与24位)的简单属性,也会导致应用程序采用不同的代码路径。并且发布了新的JRE版本,不断改进JFC类的代码,从而改变运行时行为,使得任何预先计算的分析数据都无用。
认为在开发人员的计算机上进行测试和基准测试足以说明真实的生产环境是一个典型的错误。当运行数十亿个并发事务时,看起来足够可能会变得完全无法使用,或者另一方面,只有一半RAM的客户PC就会变得无法使用。
能够根据软件的真实行为和使用模式进行分析和优化,并使用运行时发现的确切版本优化跨不同供应商的库的边界,这是Java的优势之一。