yuyee

JAVA GC

JAVA GC有很多种算法,比如引用记数,复制标记-清楚,标记-整理,每种算法都有优缺点,看特定场景选择。
比如当很多临时对象时,复制算法比较好,因为周期短,复制的可以少点,如果许多长寿对象,反复复制就不乐观了,这个时候标记-整理比较好。
目前SUN JAVA的GC用的是分代垃圾回收。
分为年轻代,老年代,持久代
年轻代存放生命周期很短的对象,这部分对象在GC的时候,很多已经是非活动对象,因此采用复制算法,只需要将少量的存货对象copy到to space,存货越少,效率越高。
年轻代的GC叫minor gc,经过多次复制,依旧存活的对象将移出年轻代,移到年老代。
年轻代分为:
eden:每当对象创建的时候,总是被分配到这个区域
survivor1:复制算法中的from space
survivor2:复制算法中的to space
年老代:
生命周期长,经过多次minor gc,依旧存活的对象
老年代的GC 叫major gc,通常也叫full gc
采用标记-整理算法。老年区域比较大,需要时间长
minor gc可能引发full gc。当eden+from space空间大于老年代剩余空间时,就会fucc gc,悲观算法
持久代:存放class信息和方法信息的地方,可通过-XX:MaxPermSize来调整最大值
-XX:NewRatio来设置年轻代与年老代比值
-XX:SurvivorRatio设置eden与survivor区的比值
-XX:MaxTenuringThreshold设置垃圾的年龄,如果=0,则表示不经过survivor区,直接进入年老代
-XX:ParallelGCThreads配置并行收集的线程数,最好与CPU数相同
-XX:+UseParallelGC 选择使用并行收集器

posted on 2010-10-26 00:56 羔羊 阅读(1061) 评论(0)  编辑  收藏 所属分类: jvm