垃圾回收就是将被虚拟机视为垃圾的对象所占的内存释放掉。
回收的是对象所占的内存
在垃圾收集器对堆内存进行回收前,会先判断哪些对象还在“存活”,哪些对象已经“死去”,这些“死去”的对象,就是我们需要进行回收的垃圾。一般判定为垃圾有两种算法。
引用计数算法(已淘汰)
引用计数算法,是指给对象中添加一个引用计数器,每当有一个地方引用它时,计数器的值就加1,当引用失效时,计数器的值就减1。当计数器值为0时,该对象就会被回收。
可达性分析算法
通过一系列被称为“GC Roots”的对象作为起点,然后向下搜索,所走过的路径被称为引用链。当一个对象到 GC Roots之间没有任何引用链时,则说明该对象是不可用的,虚拟机就会将它们的内存释放掉。
通过垃圾回收算法,JVM对垃圾进行标定然后回收其占用的内存空间。常见的垃圾回收算法有三种:
不同内存区域采用的回收算法不同,新生代使用复制算法。因为绝大多数对象不需要回收。老年代一般采用标记整理算法,CMS垃圾回收器采用标记清除算法。
我们常谈的回收,绝大多数是回收堆内存。
原文:https://www.cnblogs.com/zhangjianbing/p/13702796.html