jvm垃圾回收原理(转)

原文连接:jvm垃圾回收原理

在jvm中堆空间划分为三个代:年轻代(Young Generation)、年老代(Old Generation)和永久代(Permanent Generation)。年轻代和年老代是存储动态产生的对象。永久带主要是存储的是java的类信息,包括解析获得的方法、属性、字段等等。永久带基本 不参与垃圾回收。咱们这里讨论的垃圾回收主要是针对年轻代和年老代。具体以下图。 java

年轻代又分红3个部分,一个eden区和两个相同的survior区。刚开始建立的对象都是放置在eden区的。分红这样3个部分,主要是为了生命 周期短的对象尽可能留在年轻代。当eden区申请不到空间的时候,进行minorGC,把存活的对象拷贝到survior。年老代主要存放生命周期比较长的 对象,好比缓存对象。具体jvm内存回收过程描述以下(能够结合上图):缓存

一、对象在Eden区完成内存分配
二、当Eden区满了,再建立对象,会由于申请不到空间,触发minorGC,进行young(eden+1survivor)区的垃圾回收
三、minorGC时,Eden不能被回收的对象被放入到空的survivor(Eden确定会被清空),另外一个survivor里不能被GC回收的对象也会被放入这个survivor,始终保证一个survivor是空的
四、当作第3步的时候,若是发现survivor满了,则这些对象被copy到old区,或者survivor并无满,可是有些对象已经足够Old,也被放入Old区 XX:MaxTenuringThreshold
五、当Old区被放满的以后,进行fullGCjvm

在知道垃圾回收机制之后,你们能够在对jvm中堆的各个参数进行优化设置,来提升性能。性能

相关文章
相关标签/搜索