jvm中垃圾回收的算法有许多,这篇主要介绍generration算法
一.原理
首先每个对象的生存周期是不同的,所以generation算法将不同对象采用不同的回收策略。
年轻代:年轻代就是为了快速清理掉那些生存周期短的对象而设立的,年轻代分为三个模块,一个eden区,两个survivor区(survivor0和survivor1),它们内存按8:1:1分配,一个新的对象建立首先在eden区,年轻代的回收叫做minor GC,在回收时将eden区中存活的对象复制到survivor0区中,让后清空eden区。当survivor0区的内存被存满时,eden区和survivor0区将全部存活的对象存入survivor1区。然后将现在的survivor0区和eden区清空,之后现在的survivor1区与survivor0区交换,后队变前队一直循环,直到回收时当时的survivor1区存不下当时的survivor0+eden区的存活对象时就将存活对象放入老年代。
老年代:当对象在年轻代经历过次次历练后,他终于存活到了老年区,所以老年代中的对象大多都是一些生命周期比较长的对象,老年代也比年轻代分到到的内存要大,默认是1:2。当老年代内存也存满时就会触发一次full GC或者叫major GC也就是对年轻代老年代都进行回收。
持久代:用于存放静态文件,如Java类、方法等。持久代对垃圾回收没有显著影响,但是有些应