分为标记和清除两个阶段首先标记出所有需要回收的对象标记完成后统一回收所有被标记的对象如下图。
缺点标记和清除两个过程效率都不高标记清除之后会产生大量不连续的内存碎片。
把内存分为大小相等的两块每次存储只用其中一块当这一块用完了就把存活的对象全部复制到另一块上同时把使用过的这块内存空间全部清理掉往复循环如下图。
缺点实际可使用的内存空间缩小为原来的一半比较适合。
先对可用的对象进行标记然后所有被标记的对象向一段移动最后清除可用对象边界以外的内存如下图。
把堆内存分为新生代和老年代新生代又分为 Eden 区、From Survivor 和 To Survivor。一般新生代中的对象基本上都是朝生夕灭的每次只有少量对象存活因此采用复制算法只需要复制那些少量存活的对象就可以完成垃圾收集老年代中的对象存活率较高就采用标记-清除和标记-整理算法来进行回收。
永久代方法区中用于存放类信息jdk1.6 及之前的版本永久代中还存储常量、静态变量等当永久代的空间不足时也会触发 Full GC如果经过 Full GC 还无法满足永久代存放新数据的需求就会抛出永久代的内存溢出异常。
大对象需要大量连续内存的对象例如很长的数组会直接进入老年代如果老年代没有足够的连续大空间来存放则会进行 Full GC。
针对于上面的文章我总结出了互联网公司java程序员面试涉及到的绝大部分面试题及答案做成了文档和架构视频资料免费分享给大家包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料希望能帮助到您面试前的复习且找到一个好的工作也节省大家。
入职蚂蚁金服,年薪200万的大佬,随手扔给我的笔记,啃完后发现差距不止一点点!
- 本文固定链接: http://fenleilaji.cc/?id=25718
- 转载请注明: admin 于 分类垃圾-环境保护从分类垃圾做起! 发表
《本文》有 0 条评论