Java HotSpot性能引擎的体系结构 <script src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js" type="text/javascript"></script> <script src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js" type="text/javascript"></script> 通过使用适配性的优化技术,解决了以上所提出的Java编程语言的性能问题。适配性的优化技术是Sun公司的研究机构Self小组多年以来在面向对象的语言实现上的研究成果。
7.2 热点Hot Spot检测
适配性的优化技术利用了大多数程序的有趣的属性,解决了JIT编译问题。实际上,所有程序都是花费了它们的大部分时间而执行了它们中的很小一部分代码。JavaHotSpot性能引擎不是在程序一启动时就对整个程序进行编译,而是在程序一启动时就立即使用解释器(interpreter)运行该程序,在运行中对该程序进行分析以检测程序中的关键性"热点(Hot Spot)",然后,再将全局本地码(native-code)优化器集中在这些热点上。通过避免编译(大部分程序的)不常执行的代码,JavaHotSpot编译器将更多的注意集中于程序的性能关键性部分,因而不必增加总的编译时间。这种动态监测随着程序的运行而不断进行,因而,它可以精确地"在运行中"调整它的性能以适应用户的需要。
这种方法的一个巧妙而重要的益处是,通过将编译延迟到代码已被执行一会儿之后("一会儿"是指机器时间,而不是用户时间!),从而可在代码被使用的过程中收集信息,并使用这些信息进行更智能的优化。除收集程序中的热点信息外,也收集其它类型的信息,如与"虚拟"方法调用有关的调用者-被调用者的关系数据等。
7.3 方法内嵌
正象在"背景说明"中所提到的,Java编程语言中的"虚拟"方法调用的出现频率,是一个重要的妨碍优化的瓶颈。当Java HotSpot适配性优化器在执行过程中,一旦回收了有关程序"热点"的信息后,它不仅能将这些"热点"编译为本地代码,而且还可以执行内嵌在这些代码上的大量的方法。
内嵌具有重要的益处。它极大地减小了方法调用的动态频率,这就节省了执行这些方法调用所需要的时间。而更重要的是,内嵌为优化器生成了大得多的代码块。这种状态可以大大地提高传统编译器的优化技术的效率,从而消除提高Java编程语言性能的障碍。
内嵌对其它代码的优化起到了促进作用,它使优化的效率大大提高。随着Java HotSpot编译器的进一步成熟,操作更大的内嵌代码块的能力将使实现更先进的优化技术成为可能。
7.4 动态逆优化
尽管上述内嵌是一种非常重要的优化方法,但对于象Java编程语言那样的动态的面向对象的编程语言来说,这在传统上一直是非常难以实现的。此外,尽管检测"热点"和内嵌它们所调用的方法已经十分困难,但它仍然还不足以提供全部的Java编程语言的语义。这是因为,用Java编程语言编写的程序不仅能够"在运行中"改变方法调用的模式,而且能够为一个运行的程序动态地装载新的Java代码。
Java HotSpot性能引擎的体系结构(8)
最新推荐文章于 2024-09-10 16:56:06 发布