在探讨JVM的垃圾回收机制时,无非就是想方设法地解决下面3个问题:
- 哪些内存需要回收——what
- 什么时候回收——when
- 如何回收——how
那到底哪些内存需要回收呢?首先看看JVM的内存模型
其中,程序计数器、栈(虚拟机栈和本地方法栈)两部分的内存随线程而生,随线程而灭。直接内存又称对外内存,不是由JVM负责管理的。
但是,堆和方法区不一样,对于堆而言,对象是在运行是动态创建的,对于方法区而言,一个接口的多个实现内存需要的内存可能不一样,也是动态的。所以JVM垃圾回收机制负责的是堆和方法区。