Java HotSpot性能引擎的体系结构(9)

内嵌是基于全局分析的,动态装载使内嵌更加复杂了,因为它改变了一个程序内部的全局关系。一个新的类可能包含了需要被内嵌在适当位置的新的方法。所以,Java HotSpot性能引擎必须能够动态地逆优化(如果需要,然后再重新优化)先前已经优化过的"热点",甚至在"热点"代码的执行过程中进行这种操作。没有这种能力,一般的内嵌将不能在基于Java的程序上安全地执行。
7.5 优化编译器
只有性能关键性代码才被编译,这就"购买了时间",并可将这些时间用于更好的优化。Java HotSpot性能引擎使用全优化编译器,以此替代了相对简单的JIT编译器。全优化编译器可执行所有第一流的优化。例如:死代码删除、循环非变量的提升、普通子表达式删除和连续不断的传送(constant propagation)等。它还赋予优化某些特定于Java技术的性能。如:空-检查(null-check)和值域-检查(range-check)删除等。寄存器分配程序(register allocator)是一个用颜色表示分配程序的全局图形,它充分利用了大的寄存器集(register sets)。Java HotSpot性能引擎的全优化编译器的移植性能很强,它依赖相对较小的机器描述文件来描述目标硬件的各个方面。尽管编译器采用了较慢的JIT标准,但它仍然比传统的优化编译器要快得多。而且,改善的代码质量也是对由于减少已编译代码的执行次数而节省的时间的一种"回报"。
7.6 小结
综上所述,我们可以对Java HotSpot适配性优化器的作用做如下小结:

  • 一般来说,程序启动得更快。这是因为,与JIT编译器相比,预先编译做得较少的缘故。
  • 编译过程随着时间展开,从而使编译暂停时间更短,更不被用户所注意。
  • 仅编译性能关键性代码的做法"购买了时间",从而可将这些时间用在执行更好的优化上。
  • 由于编译较少的代码, 编译代码所需的内存较少.
  • 通过使编译代码前的等待时间变得长一点,可收集信息以执行更好的优化,如内嵌,这种技术将具有深远的意义。
  • 通过高度优化性能关键性代码,使重要的代码的运行速度更快。

7.7 对软件可重用性(reusability)的影响
面向对象的编程语言的一个主要优势是,通过为软件的重复使用提供一种强大的语言机制,来增加开发的生产力。然而实际上,很少能够获得这种可重用性。因为大量地使用这些机制可能会极大地减损性能,因而程序员都必须谨慎地使用它们。Java HotSpot技术的一个惊人的副作用是,它大大地减少了这种性能的减损代价。我们相信,这将会对面向对象的软件的开发方法产生重要的影响,它将第一次允许各个公司可以充分地使用面向对象的可重用性机制,且不会减损他们的软件性能。
这种作用的示例很容易获得。一个对使用Java编程语言的程序员的调查结果将会明确表明,许多程序员都避免使用全"虚拟"方法同时也避免编写较大的方法。因为他们确信,每一个虚拟方法的调用都会导致性能的下降。同时,"虚拟"方法(也就是在Java编程语言中的非"static"或"final"那些方法)的精细使用对高可重用性的类的构造特别重要,因为每一个这样的方法的作用就象一个"异常分支(hook)",它允许新的子类修改超类的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值