成为javagc专家parti--深入浅出java垃圾回收机制-java开发java经验技巧

成为javagc专家parti--深入浅出java垃圾回收机制-java开发java经验技巧

ID:30845316

大小:65.50 KB

页数:9页

时间:2019-01-03

成为javagc专家parti--深入浅出java垃圾回收机制-java开发java经验技巧_第1页
成为javagc专家parti--深入浅出java垃圾回收机制-java开发java经验技巧_第2页
成为javagc专家parti--深入浅出java垃圾回收机制-java开发java经验技巧_第3页
成为javagc专家parti--深入浅出java垃圾回收机制-java开发java经验技巧_第4页
成为javagc专家parti--深入浅出java垃圾回收机制-java开发java经验技巧_第5页
资源描述:

《成为javagc专家parti--深入浅出java垃圾回收机制-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、成为JavaGC专家PartI-深入浅出Java垃圾回收机制-Java开发Java经验技巧成为JavaGC专家(1)—深入浅出Java垃圾回收机制本文作者:ImportNcw-王晓杰未经许可,禁止转载!对于Java开发人员来说,了解垃圾回收机制(GC)冇哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何工作可以帮你写出更好的Java应用。这仅仅代表我个人的意见,但我坚信一个精通GC的人往往是一个好的Java开发者。如果你对GC的处理过程感兴趣,说明你已经具备较大规模应用的开发经验。

2、如果你曾经想过如何止确的选择GC算法,那意味着你已经完全理解你所开发的应用的特点。当然,我们不能以偏概全,这不能作为评价一个好的开发人员的共通标准。但是,我耍说的是,深入理解GC是成为一名伟人的程序员的必经之路。这是成为JavaGC专家系列文章的第一篇,本篇主要针对GC机制进行介绍,在下一篇中,我们将重点探讨分析GC状态以及來口NIIN的GC调优的例了。本文的目的是以一种简单的方式向你介绍GC机制。我希望这些文章能够帮到你。实际上,我的学生已经在Twitter上发布了一些很好的关于Java内核的文章,并且

3、大受欢迎。有兴趣的话,你也可以关注他们。冋到正题,咱们继续谈垃圾冋收,在学习GC之前,你首先应该记住一个单词:“stop-the-world”。Stop-thc-world会在任何一种GC算法中发生。Stop-the-world意味着JVM因为要执行GC而停止了应用程序的执行。当Stop-the-world发生时,除了GC所需的线程以外,所有线程都处于等待状态,一直到GC任务完成。GC优化很多时候就是指减少Stop-the-world发生的时间。按代的垃圾回收机制在J3V3程序中不能显式地分配和注销内存。

4、有些人把相关的对象设置为null或者调用System.gc()来试图显式地清理内存。设置为null至少没什么坏处,但是调用System,gc()会显著地影响系统性能,必须彻底杜绝(还好,我还没有见到NHN的哪个开发者调用这个方法)。在Java中,开发人员无法直接在程序代码中清理内存,而是由垃圾冋收器自动寻找不必要的垃圾对象,并且清理掉他们。垃圾回收器会在下而两种假设(hypotheses)成立的情况下被创建(称之为假设不如改为推测(suppositions)或者前提(preconditions))。大多数

5、对彖会很快变得不町达•只冇很少的由老对象(创建时间较长的对象)指向新生对象的引用这些假设我们称之为弱年代假设(weakgenerationalhypothesis)。为了强化这一假设,HotSpot虚拟机将其物理上划分为两个-新生代(younggeneration)和老年彳弋(oldgeneration)。新生代(Younggeneration):绝人多数最新被创建的对象会被分配到这里,由于大部分对彖在创建后会很快变得不可到达,所以很多对彖被创建在新生代,然后消失。对象从这个区域消失的过程我们称之为"mi

6、norGC“。老年代(Oldgeneration):对象没有变得不可达,并且从新生代中存活下来,会被拷贝到这里。其所占用的空间要比新生代多。也正由于其相对较大的空间,发生在老年代上的GC要比新生代少得多。对象从老年代中消失的过程,我们称Z为”majorGC“(或者”fullGC“)请看下而这个图表。?图1:GC空间&数据流上图屮的持久代(permanentgeneration)也被称为方法区(methodarea)。他用來保存类常量以及字符串常量。因此,这个区域不是用來永久的存储那些从老年代存活卜•來的对

7、象。这个区域也可能发生GC。并且发生在这个区域上的GC事件也会被算为majorGC。有些人可能会问:如果老年代的对象需要引用一个新生代的对象,会发生什么呢?为了解决这个问题,老年代中存在一个?,cardtable“,他是一个512byte大小的块。所有老年代的对象指向新生代对象的引用都会被记录在这个表小。当针对新生代执行GC的时候,只需要查询cardtable来决定是否可以被收集,而不用查询整个老年代。这个cardtable由一个writebarrier管理。writebarrier给GC带来了很大的性能

8、提升,虽然由此可能带来一些开销,但GC的整休时间被显著的减少。图2:CardTable结构?新生代的构成为了更好地理解GC,我们现在来学习新生代,新生代是用来保存那些第一次被创建的对象,他可以被分为三个空间•?一个伊甸园空间(Eden)•?两个幸存者空间(Survivor)一共有三个空间,其中包含两个幸存者空间。每个空间的执行顺序如下:1.绝大多数刚刚被创建的对象会存放在伊何园空间。2.在伊甸园空间执行了笫一次GC之后,存活的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。