垃圾回收在是JVM的重要特征之一。作为世界上最流行的编程语言,java在垃圾回收的处理上是花费了大量设计精力的,这也使得java不像c++那样,程序员在开发过程中要频繁的考虑内存问题。
话不多说,现在来介绍GC的两大类:
1、serial GC(-XX:+UseSerialGC)
顾名思义,单核GC。这种收集方式比较原始,只有单核cpu的时代就已经存在了。可是用这种方式比较影响性能,因为,它在工作的时候,别的工作线程就必须停止,cpu全心全意围着一个线程服务。这种方式一般适用于小型应用。
它的算法也比较简单:
第一步是查找出老年代存货的对象并且做好标记。第二步则是把这些存活的对象顺序的保存好。这个时候堆内存被划分为两个空间,一个是存满了老年代对象的空间,而另一个则是被压缩出来的空的空间。
2、 Parallel GC (-XX:+UseParallelGC)
多线程收集方式。相比较serial GC而言,多线程收集比较高效。你可以理解为多线程相对于单线程的优点。资源利用率高,响应快。
目前JVM默认的就是多线程回收器。
也许大家会觉得奇怪,JVM的回收器肯定不止这两种,当然,我必须告诉你,回收器的种类数量远远超出你的想象。尤其是多线程回收器,比如Parallel Old、CMS、G1等等,在这里我只把它们归为多线程回收器一类。这里面内容很多,后续有时间再研究。