标签:解决 自己的 机制 回收 垃圾回收机制 font 基本 hotspot 并且
遇到的问题说不清楚,或者无法向别人清楚的解释自己知道的某件事情,这是一种小的沟通问题。
我最喜欢的一本也是目前觉得最棒的一本书是《深入java虚拟机》,不仅是因为其中的知识,更是因为在讲述知识的时候能把知识说的非常明白。
大部分学习java的人都知道java的垃圾回收机制,可是却没有想过在垃圾收集中可能会出现的问题以及如何解决,因为大多数书籍和文章只是简单的罗列各种算法,让我们来看看作者是怎么说明一个技术问题的吧,下面一段是第9章的一段话:
垃圾收集算法和明确释放对象比起来有一个潜在的缺点,即垃圾收集算法中程序员对安排CPU时间进行内存回收缺乏控制。要精确地预测出何时(甚至是否)进行垃圾收集、收集需要多长时间,基本上都是不可能的。因为垃圾收集一般部会停止整个程序的运行来査找和收集垃圾对象,它们可能在程序执行的任意时刻暂停,并且暂停的时间也无法确定。这种垃圾收集暂停有时候长得让用户都注意到了。垃圾收集也可能使得程序对事件响应迟钝,无法满足实时系统的要求。如果一种垃圾收集算法可能导致用户可察觉得到的停顿或者使得稈序无法适合实时系统的要求,这种箅法被称作破坏性的。为了减少垃圾收集和明确释放对象之间的潜在差距,设计垃圾收集算法的一个基本目标就是使本质上的破坏性尽可能少,如果可能的话,尽可能消除这种破坏性。
达到(或者试图达到)非破坏性垃圾收集的方法是使用渐进式收集算法。渐进式垃圾收集器就是不试图一次性发现并回收所有不可触及的对象,而是每次发现并回收一部分。因为每次都只有堆的一部分执行垃圾收集,因此理论上说每一次收集会持续更短的时间。如果有—个这样的支持渐进收集方法的垃圾收集器,每次可以保证(或者至少非常接近)不超过一个最大时间长度,就可以让Java虚拟机适合实时环境。限时渐进垃圾收集器在用户环境中也令人满意,因为这样的收集器可以消除用户可察觉得到的垃圾收集停顿。
通常渐进式收集器都是按代收集的收集器,大部分调用中,都是收集堆的一部分。在本章的的前面部分曾经提到,按代收集的收集器把堆划分为两个或多个年齡层,每一个都拥有自己的子堆,凭经检可知.大部分对象很快消亡,利用这一点.按代收集的垃圾收集器在年幼的子堆中比在年老的子堆中活动更频繁。因为除了最商寿的那个年龄层(成熟对象空间)之外,每一个子堆中都可以给定一个最大尺寸,按代收集的收集器可以大体上保证在一个最大时间值内渐进地收集所有的对象( 最高寿的除外) 。成熟对象空间无法给出最大尺寸,因为,在任何其他年龄层中不再适合的对象总要有个去处,它们没有其他地方可去。
火车算法最早是由理查德和莫森提出的,目前正用于Sun公司的Hotspot虚拟机,该算法详细说明了按代收集的垃圾收集器的成熟对象的组织。火车算法的目的是为了在成熟对象空间提供限定时间的渐进收集。
相信上面那几段话让我们垃圾收集有了更深入的认识,说的非常之清晰有条理,我这里简单分析上面这几段话是怎么把问题说明白的吧:
=======================================================================================================================================
垃圾收集算法和明确释放对象比起来有一个潜在的缺点,/这段话的总领,指出这段话是说明这个潜在的缺点的/即垃圾收集算法中程序员对安排CPU时间进行内存回收缺乏控制。要精确地预测出何时(甚至是否)进行垃圾收集、收集需要多长时间,基本上都是不可能的。/指出这个缺点/因为垃圾收集一般部会停止整个程序的运行来査找和收集垃圾对象,它们可能在程序执行的任意时刻暂停,并且暂停的时间也无法确定。/具体说明这个缺点/这种垃圾收集暂停有时候长得让用户都注意到了。垃圾收集也可能使得程序对事件响应迟钝,无法满足实时系统的要求。/这个缺点的外在表现及危害/如果一种垃圾收集算法可能导致用户可察觉得到的停顿或者使得稈序无法适合实时系统的要求,这种箅法被称作破坏性的。/指出严重性/为了减少垃圾收集和明确释放对象之间的潜在差距,设计垃圾收集算法的一个基本目标就是使本质上的破坏性尽可能少,如果可能的话,尽可能消除这种破坏性。/我们设计算法的目标/ 达到(或者试图达到)非破坏性垃圾收集的方法是使用渐进式收集算法。/总领,指出这段话是如何解决上一段提到的缺点的/渐进式垃圾收集器就是不试图一次性发现并回收所有不可触及的对象,而是每次发现并回收一部分。/说明如何解决/因为每次都只有堆的一部分执行垃圾收集,因此理论上说每一次收集会持续更短的时间。/具体解释以及理论后果/如果有—个这样的支持渐进收集方法的垃圾收集器,每次可以保证(或者至少非常接近)不超过一个最大时间长度,就可以让Java虚拟机适合实时环境。限时渐进垃圾收集器在用户环境中也令人满意,因为这样的收集器可以消除用户可察觉得到的垃圾收集停顿。/假设,我们采取了这种应对方法,会出现什么结果/
通常渐进式收集器都是按代收集的收集器,大部分调用中,都是收集堆的一部分。/在实际中的应用/在本章的的前面部分曾经提到,按代收集的收集器把堆划分为两个或多个年齡层,每一个都拥有自己的子堆,凭经检可知.大部分对象很快消亡,利用这一点.按代收集的垃圾收集器在年幼的子堆中比在年老的子堆中活动更频繁。因为除了最商寿的那个年龄层(成熟对象空间)之外,每一个子堆中都可以给定一个最大尺寸,按代收集的收集器可以大体上保证在一个最大时间值内渐进地收集所有的对象( 最高寿的除外) 。成熟对象空间无法给出最大尺寸,因为,在任何其他年龄层中不再适合的对象总要有个去处,它们没有其他地方可去。/具体的技术实现/
火车算法最早是由理查德和莫森提出的,目前正用于Sun公司的Hotspot虚拟机,该算法详细说明了按代收集的垃圾收集器的成熟对象的组织。火车算法的目的是为了在成熟对象空间提供限定时间的渐进收集。/这种方案的提出人,下面几段具体讲述火车算法/
...
============================================================================================================================================================================================================
可以看到,作者说明问题的思路大概是:现有方案有什么问题,这个问题是怎么产生的,有什么表现,会有什么危害,我们应该怎么做;应该采用的应对方法,这种方法是如何解决问题的,如果我们采用这种应对方法,会有什么样的结果;举出在现实中的实际方案,解释技术实现;最后引出技术实现的提出人。至此,一种在现实中广泛应用的算法技术的产生背景与基本思想也讲述完成了。
如果我们在向别人说明垃圾收集的这种实现方案,按照这种思路,想必别人也会听得非常清楚,如果我们在准备向别人说明解释任何一种问题时,都按照这种思路,由过去到现在,一语直指你要说明的关键问题,那也是非常清晰的。
这里只是简单举了个小例子,这本书还有其他解释非常到位的地方,让人知其然,更知其所以然,以后有空再补上其他例子。
标签:解决 自己的 机制 回收 垃圾回收机制 font 基本 hotspot 并且
原文地址:http://www.cnblogs.com/qilong853/p/6395802.html