写点什么

java 虚拟机 GC 学习笔记一

用户头像
风翱
关注
发布于: 2 小时前

java 虚拟机常见 GC:

一、串行 GC(Serial GC)/ParNewGC

-XX:+UseSerialGC 配置串行 GC

串行 GC 对年轻代使用 mark-copy(标记-复制) 算法,对老年代使用 mark-sweep-compact(标记-清除-整理)算法。两者都是单线程的垃圾收集器,不能进行并行处理,所以都会触发全线暂停(STW),停止所有的应用线程。因此这种 GC 算法不能充分利用多核 CPU。不管有多少 CPU 内核,JVM 在垃圾收集时都只能使用单个核心。CPU 利用率高,暂停时间长。简单粗暴,就像老式的电脑,动不动就卡死。

该选项只适合几百 MB 堆内存的 JVM,而且是单核 CPU 时比较有用。

-XX:+USeParNewGC 改进版本的 Serial GC,可以配合 CMS 使用。


二、并行 GC(Parallel GC) 

-XX:+UseParallelGC

-XX:+UseParallelOldGC

-XX:+UseParallelGC -XX:+UseParallelOldGC

年轻代和老年代的垃圾回收都会触发 STW 事件。

在年轻代使用 标记-复制(mark-copy)算法,在老年代使用 标记-清除-整理(mark-sweep

compact)算法。 

-XX:ParallelGCThreads=N 来指定 GC 线程数, 其默认值为 CPU 核心数。

并行垃圾收集器适用于多核服务器,主要目标是增加吞吐量。因为对系统资源的有效使用,能达到

更高的吞吐量: 

• 在 GC 期间,所有 CPU 内核都在并行清理垃圾,所以总暂停时间更短;

• 在两次 GC 周期的间隔期,没有 GC 线程在运行,不会消耗任何系统资源。

发布于: 2 小时前阅读数: 3
用户头像

风翱

关注

还未添加个人签名 2017.11.24 加入

勇于尝试,持续成长

评论

发布
暂无评论
java虚拟机GC学习笔记一