JVM--垃圾收集器

由前面可知程序计数器、栈、本地方法区都是随线程而生,随线程而灭,所以不需要考虑内存回收。


判断对象是否存活:

1、引用计数器:很难解决对象之间的相互循环引用。

2、可达性分析:可作为GC Roots对象的有:1、虚拟机栈中引用的对象2、方法区中类静态属性引用的对象3、方法区中常量引用的对象4、本地方法栈中JNI(即一般说的Native方法)


引用:强引用、软引用、弱引用、虚引用。

强引用:只要强引用还在,垃圾收集器不会回收被引用的对象。

软引用:在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中进行二次回收

弱引用:被弱引用关联的对象只能存活到下一次垃圾收集发生之前,当垃圾回收器工作时,无论内存是否足够,都会回收。

虚引用:一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例。唯一目的就是能在这个对象被收集器回收时收到一个系统通知。


回收方法区垃圾:回收废弃常量和无用的类。

判定无用类要同时满足3个条件:1、该类的所有实例已经被回收2、加载该类的classLoader已经被回收3、该类对应的java.lang.class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。



垃圾收集算法


1、标记-清除算法

2、复制算法:一般用于回收新生代

3、标记整理:

4、分代收集算法:在新生代使用复制算法,老年代使用标记-清除或标记-整理算法。


垃圾收集器:

JVM--垃圾收集器_第1张图片


Serial收集器:是一个单线程收集器,它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。他是运行在Client模式下的默认新生代收集器。


ParNew收集器:是Serial收集器的多线程版本。是运行在Server模式下的虚拟机首选的新生代收集器。


Paraller Scavenge 收集器:目的是为了达到一个可控的吞吐量。也称为“吞吐量优先”收集器


Serial Old收集器:是Serial收集器的老年代版本,同样是一个单线程收集器。


Paraller Old收集器:是Paraller Scavenge的老年代版本,使用多线程和“标记-整理”算法。


CMS收集器:是一种以获得最短回收停顿时间为目标的收集器。分为4个步骤:初始标记、并发标记、重新标记、并发清除。


G1收集器:特点:并发与并行、分代收集、空间整合、可预测的停顿。

你可能感兴趣的:(jvm,虚拟机,垃圾收集器)