什么是垃圾:垃圾指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾
一个程序进程就对应一个运行时数据区,程序进程执行结束后运行时数据区也就没有了
一、垃圾回收相关算法
1、标记阶段
1)如何判断对象是否存活
- 在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中那些对象是存活对象,那些是已经死亡的对象。只有被标记为已经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占的内存空间,因此这个过程我们可以称为垃圾标记阶段
- 那么在jvm中究竟是如何标记一个死亡对象呢?简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡
- 判断对象存活一般有两种方式:引用计数算法和可达性分析算法
==>存在GC行为的只有堆和方法区,主要GC是堆