在应聘Java程序员时,经常会被问到JVM相关的知识点。而市面上讲解JVM原理及结构的书籍及资料,要么晦涩难懂,要么断章取义。那么有没有一张比较清晰的图能够将JVM的整体轮廓有一个清晰的描述呢?
小码农特地为大家绘制了一张图,希望对大家有用!
图中涉及的各垃圾回收器特点如下:
1、Serial(新生代-串行-收集器)
- 策略:标记-复制-清除;
- 优点:简单高效,适合Client模式的桌面应用(Eclipse);
- 缺点:多核环境下,无法充分利用资源;
2、parnew(新生代-并行-收集器)
- 策略:标记-复制-清除;
- 优点:多线程、独占式,多核环境下提高CPU利用率;
- 缺点:单核环境下比Serial效率低;
3、Parallel Scanvenge(新生代-并行-收集器)
- 策略:标记-复制-清除;
- 优点:精准控制“吞吐量”、gc时间。吞吐量=执行用户代码时间/(执行用户代码时间+内存回收时间);
- 配置参数(可通过参数精准调控):
4、Serial Old(老年代-串行-收集器)
- 策略:标记-清除-整理;
- 优点:简单高效;
- 缺点:多核环境下,无法充分利用资源;
5、Parall Old(老年代-并行-收集器)
- 策略:标记-清除-整理;
- 优点:多核环境下,提高CPU利用率;
- 缺点:单核环境下,比Serial Old效率要低;
6、CMS(老年代-并发-收集器);
- 策略:标记-清除;优点:“停顿时间”最短;
- 缺点:内存碎片(有补偿策略);
- 适用场景:互联网Web应用的Server端、涉及用户交互、响应速度快;
7、G1(新生代&老年代-并行&并发-服务端收集器)
- 策略:G1将内存划分为Region,避免内存碎片;
- 优点:Eden、Survivor、Tenured不再固定,内存使用率更高;可控的STW时间,根据预期的停顿时间,只回收部分Region;
- 适应场景:多核CPU,JVM占用内存比较大的情况(>4GB);
本文分享自微信公众号 - 无敌码农(jiangqiaodege),作者:无敌码农
原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。
原始发表时间:2018-09-11
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句