回顾引入:
首先字节码文件是通过类加载器加载进来 存储到运行时的数据区域的方法区进行存储 然后解释器负责执行字节码中的指令 在执行指令时会生成很多个对象 这些对象存储到 内存中的堆上 那么在堆上的对象不再使用 虚拟机是不是要帮我们处理掉呢 所以销毁的过程就是由垃圾回收器完成的
方法区的回收:
数据运行区的五大部分:
首先 有人会好奇为什么学习自动垃圾回收机制时 左边三块区域不用考虑?
因为
堆回收
引用计数法和可达性分析法
而JAVA虚拟机用的是可达性分析法
五种对象引用
垃圾回收算法
有四种主要的算法:
标记清除算法
复制算法
标记整理算法
分代垃圾回收算法
当整个新生代的空间都被使用时,先尝试Minor GC,把未达到年龄阈值但是最老的对象放入老年代,如果老年代空间也被占满了,会触发Full GC(回收整个堆的所有对象)
垃圾回收器
首先解决一个问题
垃圾回收器
第一套组合 Serial------Serial Old
第二套组合 ParNew-----CMS
第三套组合 Paralle Scavenge-----Parallel Old
第四种 G1垃圾回收器
G1垃圾回收有两种方式
年轻代回收
那么G1是如何选择某些区域进行回收的:
混合回收
总结: