一、那些内存需要回收?
1、程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而亡,栈中的栈帧随着方法的进入和退出而有条不许的执行着出栈和入栈操作;每一个栈帧中分配多少内存基本上是在类结构确定下来就已知,因此这几个区域的内存分配和回收具有确定性,这几个区域不需要过多考虑回收的问题,因为方法结束,或线程结束,内存自然跟着回收了。而java堆和方法区则不一样,因为一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有运行的时候才会知道会创建那些对象,这部分内存的分配和回收具有动态的,垃圾回收关注的就是这部分内容。