欢迎来到天天文库
浏览记录
ID:41713326
大小:126.56 KB
页数:8页
时间:2019-08-30
《深入浅出Java垃圾回收机制》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、深入浅出Java垃圾回收机制对于Java开发人员來说,了解垃圾回收机制(GC)冇哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何工作可以帮你写出更好的Java应用。这仅仅代表我个人的意见,但我坚信一个精通GC的人往往是一个好的Java开发者。如果你对GC的处理过程感兴趣,说明你已经具备较大规模应川的开发经验。如果你怦经想过如何」E确的选择GC算法,那意味着你己经完全理解你所开发的应用的特点。当然,我们不能以偏概全,这不能作为评价一个好的开发人员的共通标准。但是,我要说的是,深入理解GC是成为一名伟大的程序员的必经Z路。这是成为JavaGC专家系列文章的第一
2、篇,木篇主要针对GC机制进行介绍,在下一篇中,我们将亟点探讨分析GC状态以及来自NHN的GC调优的例子。本文的目的是以一种简单的方式向你介绍GC机制。我希望这些文章能够帮到你。实际上,我的学生已经在Twitter±发布了一些很好的关于Java内核的文章,并且大受欢迎。冇兴趣的话,你也可以关注他们。回到正题,咱们继续谈垃圾回收,在学习GCZ前,你首先应该记住一个单词:“stop-the-wo:rld”。Stop-the-world会在任何一种GC算法中发牛。Stop-the-world;&味着JVM因为耍执行GC而停止了应用程序的执行。当Stop-the-world发生时,除了GC所
3、需的线程以外,所有线程都处于等待状态,直到GC任务完成。GC优化很多时候就是指减少Stop-the-world发生的时间。按代的垃圾回收机制在Java程序中不能显式地分配和注销内存。有些人把相关的对象设置为null或者调JIJSystem.gc()来试图显式地清理内存。设置为null至少没什么坏处,但是调用System,gc()会显著地影响系统性能,必须彻底杜绝(还好,我还没冇见到NIH的哪个开发者调用这个方法)。在Java中,开发人员无法直接在程序代码中淸理内存,而是山垃圾回收器自动寻找不必要的垃圾对彖,并且清理掉他们。垃圾回收器会在下面两种假设(hypotheses)成立的情况
4、下被创建(称之为假设不如改为推测(suppositions)或者前提(preconditions))。大多数对彖会很快变得不可达只有很少的由老对象(创建时间较长的对象)指向新生对象的引用这些假设我们称之为弱年代假设(weakgenerationalhypothesis)o为了强化这一假设,HotSpot虚拟机将其物理上划分为两个-新生代(younggeneration)和老年代(oldgeneration)。新生代(Younggeneration):绝大多数最新被创建的对彖会被分配到这里,山于大部分对象在创建后会很快变得不可到达,所以很多对象被创建在新生代,然后消失。对彖从这个区域
5、消失的过程我们称Z为"minorGC"。老年代(Oldgeneration):对彖没冇变得不可达,并且从新生代中存活下來,会被拷贝到这里。其所占用的空间耍比新牛•代多。也」E由于其相对较人的空间,发生在老年代上的GC要比新牛代少得多。对象从老年代中消失的过程,我们称之为"majorGC“(或者"fullGC“)请看下面这个图表。allocationsYoungGenerationOOD—2i1PromotionPermanentGenerationOldGeneration图1:GC空间&数据流上图中的持久代(permanentgeneration)也被称为方法区(methodar
6、ea)。他用来保存类常量以及字符串常量。因此,这个区域不是用來永久的存储那些从老年代存活下來的对彖。这个区域也可能发牛GC。并且发生在这个区域上的GC事件也会被算为majorGC。冇些人可能会问:如果老年代的对象需要引用一个新生代的对象,会发生什么呢?为了解决这个问题,老年代中存在一个”cardtable“,他是一个512byte大小的块。所有老年代的对象指向新生代对彖的引用都会被记录在这个表中。当针对新生代执行GC的时候,只需要查询cardtable來决定是否可以被收集,而不用査询整个老年代。这个cardtablefl]—个writebarrier來管理。writebarrier
7、给GC带來了很人的性能提升,虽然由此可能带來一些开销,但GC的整体时间被显著的减少。CardTable图2:CardTable结构新生代的构成为了更好地理解GC,我们现在来学习新生代,新生代是川来保存那些第一次被创建的对象,他可以被分为三个空间—个伊甸园空间(Eden)两个幸存者空间(Survivor)一共冇三个空间,其中包含两个幸存者空间。每个空间的执行顺序如下:绝大多数刚刚被创建的对彖会心放在伊甸园空间。在伊甸园空间执行了第-•次GCZ后,存活的对彖被移动到其中一
此文档下载收益归作者所有