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

5.6 增量"无暂停"垃圾回收器
标记-整理回收器不能消除所有用户可感觉的暂停, 用户可感觉的垃圾回收暂停是在 "旧的"对象(在机器术语中指已经 "活" 了一段时间的对象)需要做垃圾收集时出现的, 而且这种暂停与现存的活的对象的数据量成比例。这就意味着当有较多数据被处理时, 该暂停可能是任意大的; 这对服务器应用程序、动画或其它软实时应用程序来说,是一种非常不好的的表现。
Java HotSpot性能引擎提供了另一种使用的旧空间垃圾回收器以解决这一问题。该回收器是全增量的, 它消除了用户可探察的垃圾回收暂停。该增量回收器可平滑地按比例增加,即使在处理特大的对象数据集时,也可以提供相对不变的暂停时间。这为如下应用程序创造了极佳的表现:

  • 服务器应用程序, 特别是高可用性的应用程序;
  • 处理非常大的 "活的"对象的数据集的应用程序;
  • 不期望有用户可注意到的暂停的应用程序, 如游戏、动画或其它高交互性的应用程序。

无暂停回收器采用的是一种增量旧空间回收方案, 学术上称该方案为"列车(train)"算法。该算法是将旧空间回收时的暂停分离为许多微小的暂停(典型的暂停小于10毫秒), 然后将这些微小的暂停随着时间散布开来, 于是, 实际上的程序对用户来讲,就象是没有暂停一样。由于列车算法不是一个硬实时(hard-real time)算法, 因而它不能保证暂停次数的上限。然而, 实际上特大量的暂停是极罕见的, 并且它们不是由大的数据集直接引起的。
作为一种人们十分欢迎的有益的副产品, 无暂停回收还可以改善内存本地性。因为该算法试图将紧密 "耦合的(coupled)"对象组重新定位到相邻的内存区域中, 从而可以为这些对象提供最好的内存分页和高速缓存本地性之属性。这对操作不同的对象数据集的多线程应用程序来说, 也是非常有益的。6. 超快速线程同步
Java 编程语言的另一个重要的诱人之处,是它提供了一种语言级的线程同步。这就使得编写带有精细的线程同步加锁的多线程程序变得十分简单。然而不幸的是,目前的同步实现相对于其它Java编程语言中的微操作来说,效率非常底,它使精细的同步的操作变成了性能主要的瓶颈。
Java HotSpot性能引擎在线程的同步实现上取得了突破,它极大地促进了同步性能的提高。其结果是使同步性能变得如此之快,以至于对大多数现实世界的程序来说,它已经不是一个重要的性能问题了。
除了在"内存模型"一节中提到的在空间方面的益处之外,同步机制通过为所有无竞争的同步(它动态地由绝大多数同步所构成)提供超快速和常数-时间(constant-time)性能, 从而也提供了它的在性能方面的益处。
Java HotSpot同步实现完全适合于多重处理并应该展示出色的多处理器性能特征。
7. Java HotSpot编译器
7.1 背景说明
Java编程语言是一种新的具有独特性能特征的编程语言。迄今为止,大部分试图提高其性能的尝试都集中在如何应用为传统语言开发的编译技术上。及时编译器是基本的快速传统编译器,它可以"在运行中"将Java字节码转换为本地机器代码。及时编译器在终端用户的实际执行字节码的机器上运行,并编译每一个被首次执行的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值