垃圾收集(简称GC)
在java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈这三个区域随着线程而生,随线程而灭,
- 栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。
- 每一个栈帧中分配多少内存基本在类结构确定下来是酒已知的
因此这几个区域的内存分配和回收都具备确定性,在这几个区域内不需要过多的考虑如何回收的问题,当方法结束或者线程结束时,内存自然就跟随者回收了
而Java堆和方法区这两个区域则由很显著的不确定性:
- 一个接口的多个实现类需要处理的内存可能会不一样
- 一个方法所执行的不同条件分支所需要的内存也可能不一样
只有处于运行期间,我们才能知道程序就行会创建哪些对象,创建多少个对象,这部分内存的分配和回收是动态的。
垃圾收集器所关注的正是这部分的内存该如何管理,内存的分配和回收也仅仅特指这一部分内存。