Java入门之了解JVM(34)

GC基本介绍

用于新生代的GC(标记-复制算法)

Serial收集器最为历史悠久的GC收集器单线程,回收垃圾时会触发stop the world(停掉GC线程外的所有其他线程)直到GC结束虽然Serial收集器会触发stop the world,但是对于计算机而然而可能只是短短的几毫秒甚的事情,因此只要不是特别频繁也是可以接受的,而且因为它单线程的缘故而减少了cpu线程切换的开销,在内存不到的情况下,Serial收集器还是相对其他一些新生代GC要为高效的,所以目前client模式下新生代GC还是默认为Serial收集器ParNew收集器Serial收集器的多线程版本(只是多线程回收垃圾,一样会stop the world)Server模式下的首选,多线程(吞吐量相对单线程更大)且又可以和CMS收集器组合工作Parallel Scavenge收集器并行多线程,这比ParNew收集器更加高级,但不能和CMS组合工作它的关注点和其他的GC不同,其他的GC关注点是如何减少GC执行的时间,而Parallel Scavenge关注的是可控制的吞吐量,而GC执行时间和吞吐量是成反比的;即GC时间短则吞吐量就小,GC时间长则吞吐量大提供了 控制GC收集时间参数(-XX:MaxGCPauseMillis) 和 控制吞吐量参数(-XX:GCTimeRatio) 需要注意的是它虽然提供了控制GC收集时间的参数设置(要求值大于0),但并不是想设置多短时间就能设置多短时间的,Parallel Scavenge只能够尽自己最大的努力去满足这个时间并且如果不能达到要求则会调整堆的规格用于老年代的GC(标记-压缩算法)

推荐阅读