抱歉,您的瀏覽器無法訪問本站
本頁面需要瀏覽器支持(啟用)JavaScript
了解詳情 >

JVM垃圾回收算法有哪些

  • 标记-清除
  • 标记-复制
  • 标记-整理

JVM GC的全流程

  1. 当现在有一个新的对象产生,那么对象一定需要内存空间,于是现在就需要为该对象进行内存空间的申请;
  2. 首先会判断Eden区是否有内存空间,如果此时有内存空间,则直接将新对象保存在Eden区;
  3. 但是如果此时Eden区的内存空间不足,那么会自动执行一个MinorGC操作,将Eden区的无用内存空间进行清理,清理之后会继续判断Eden区的内存空间是否充足?如果内存空间充足,则将新的对象直接在Eden区进行空间分配;
  4. 如果执行了Minor GC之后发现Eden区的内存依然不足,那么这个时候会进行Survivor区判断,如果Survivor有剩余空间,则将Eden区的部分活跃对象保存在Survivor区,那么随后继续判断Eden区的内存空间是否充足,如果充足,则在Eden区进行新对象的空间分配;
  5. 如果此时Survivor也已经没有内存空间了,则继续判断老年区,如果此时老年区空间充足,则将Survivor区中的活跃对象保存到老年代,而后Survivor就会存现有空余空间,随后Eden区将活跃对象保存在Survivor之中,而后在Eden区里为新对象开辟空间;
  6. 如果这个时候老年代也满了,那么这个时候将产生M ajor GC(FullGC),进行老年代的内存清理。
  7. 如果老年代执行了Full GC之后发现依然无法进行对象的保存,就会产生OOM异常“OutOfMemoryError”

JVM中 新生代和老年代分别使用什么回收方法

  • 新生代使用:标记-复制算法
  • 老年代使用:标记-整理算法