垃圾收集器的种类
串行垃圾回收器(Serial Collector) Serial:连续的
一个单线程的收集器,使用标记-复制算法 (*)。适用于小型应用,停顿时间较长。在进行垃圾收集时候,必须暂停其他所有的工作线程直到它收集结束。不适合服务器环境。
标记复制算法是一种垃圾收集算法主要用于新生代的垃圾收集.它将堆内存分为两个相等的大小的区域,一个是活动区域(From区域) 一个是空闲区域(To区域一直是'空'的)
并行垃圾回收器(Parallel Collector) Parallel:并行的
指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。适用于科学计算,大数据处理等与前端弱交互的场景,使用标记-复制算法。适用于大型应用,通过利用多核处理器来加速垃圾收集过程。
并发垃圾收集器 (CMS Collector) 垃圾收集器和应用程序一起进行
指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替进行),不需要停顿用户线程,使用标记-清除算法。适用于对响应时间有较高要求的应用,通过在垃圾收集过程中与应用程序并发执行来减少停顿时间。适用于互联网公司,对响应时间有要求
G1垃圾收集器
在G1中,堆被划分成 许多个连续的区域(region)。采用G1算法进行回收,吸收了CMS收集器特点。使用分代收集算法,将堆内存划分为多个区域。适用于大内存应用和对响应时间有较高要求的应用,通过优化内存分配和垃圾回收来减少停顿时间。
特点:支持很大的堆,高吞吐量(并行多则吞吐量大)
--支持多CPU和垃圾回收线程
--在主线程暂停的情况下,使用并行收集
--在主线程运行的情况下,使用并发收集
实时目标:可配置在N毫秒内最多只占用M毫秒的时间进行垃圾回收
通过JVM参数
-XX:+UseG1GC 使用G1垃圾回收器
查看服务器默认的垃圾收集器
JVM参数:
java -XX:+PrintCommandLineFlags -version