Java垃圾回收(What,When,How)

1 述

  • 垃圾回收(Garbage Collection,GC),是一种自动的存储管理机制。当一些被占用的内存不再需要时,就应该予以释放,以腾出空间。

2 哪些内存需要回收

程序计数器,虚拟机栈,本地方法栈

  • 程序计数器,虚拟机栈,本地方法栈3个区域随线程而生,随线程而灭;
  • 栈中的栈帧随着方法的进入和退出而有条不紊的执行着出栈和入栈操作。
  • 每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的。因此 这3个区域的内存分配和回收都具备确定性,便不需要多考虑回收的问题。

堆和方法区
Java 堆和方法区则不一样,我们只有在程序处于运行期才能知道会创建哪些对象,(实现类的内存可能不一样,执行方法需要的内存也可能不一样)这部分内存的分配和回收都是动态的。垃圾收集所关注的就是这部分内存。

3 什么时候回收

(除手动触发以外)总的来说,有两个条件会触发主GC :

  • 1、当应用程序空闲或者转为后台应用时,GC会被调用。
  • 2、堆内存不足时,GC会被调用。当应用线程在运行,并在运行过程中创建新对象,若这时内存空间不足,JVM就会强制地调用GC线程,以便回收内存用于新的分配。若一次GC之后(minor GC)仍不能满足内存分配的要求,JVM会再进行一次GC(major GC)作进一步的尝试,若仍无法满足要求,则 JVM将报“out of memory”的错误,应用将停止。

4 如何回收

在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器会判定对象是否”存活”(与引用有关),不“存活”的对象便会在适当的时候通过垃圾收集器回收。

参考

Java垃圾回收(一)—— 回收机制

你可能感兴趣的:(Java垃圾回收(What,When,How))