一、标记/清除算法
描述:当内存耗尽,程序停止,开启GC线程,标记GCRoots可达的对象,清除所有未标记的对象。
缺点:1.内存空间不连续。2.效率较低,GC线程执行时,程序停止。
额外:程序停止原因:如果程序与GC线程同时执行,会有一些新建的对象没有别标记导致错误清除。
二、复制算法
描述:将内存分为两块,活动区域和空闲区域,每次使用活动区域。当内存耗尽,程序停止,开启GC线程,将活动区域的对象复制到空闲区域且内存地址连续排列。
优点:内存空间整齐。
缺点:1.浪费了一半的内存。2.当存活对象较多时,大量复制对象,效率较低。
三、标记/整理算法
描述:当内存耗尽,程序停止,开启GC线程,标记GCRoots可达的对象,将标记的对象整理为内存地址连续排列,清除未标记的对象。
优点:1.剩下了一半内存。2.内存空间整齐。
缺点:要进行标记、整理效率较低。
四、分代搜集算法
背景知识:jvm将堆内存分成新生代、老年代。
新生代:对象存活概率较低。
老年代:对象存活概率较高。
将好像垃圾分类,分开用不同的方式处理
回到正题
描述:对新生代使用复制算法,老年代使用标记/清除或标记/整理算法。
额外:什么时候会将新生代内的对象转移到老年代?
1.新生代对象的年龄达到在jvm中设置的规定年龄
2.新生代内存满了