JVM垃圾收集器异同
来源:互联网 发布:淘宝企业店 编辑:程序博客网 时间:2024/05/21 14:46
JVM 垃圾收集器有3类,这里主要介绍我们常用的 并行和并发收集器:
The Throughput Collector (也叫并行收集器)
串行收集器在GC时会停止其他所有工作线程(stop-the-world),CPU利用率是最高的,所以适用于要求高吞吐量(throughput)的应用,但停顿时间(pause time)会比较长,所以对web应用来说就不适合,因为这意味着用户等待时间会加长。而并行收集器可以理解是多线程串行收集,在串行收集基础上采用多线程方式进行GC,很好的弥补了串行收集的不足,可以大幅缩短停顿时间(如下图表示的停顿时长高度,并发比并行要短),因此对于空间不大的区域(如young generation),采用并行收集器停顿时间很短,回收效率高,适合高频率执行。
The Concurrent Low Pause Collector(也叫并发收集器)
并发收集器GC时GC线程和应用线程大部分时间是并发执行,只是在初始标记(initial mark)和二次标记(remark)时需要stop-the-world,这可以大大缩短停顿时间(pause time),所以适用于响应时间优先的应用,减少用户等待时间。由于GC是和应用线程并发执行,只有在多CPU场景下才能发挥其价值,在执行过程中还会产生新的垃圾floating garbage,如果等空间满了再开始GC,那这些新产生的垃圾就没地方放了,这时就会启动一次串行GC,等待时间将会很长,所以要在空间还未满时就要启动GC。mark和sweep操作会引起很多碎片,所以间隔一段时间需要整理整个空间,否则遇到大对象,没有连续空间也会启动一次串行GC。采用此收集器(如tenured generation),收集频率不能大,否则会影响到cpu的利用率,进而影响吞吐量。
针对年轻代和年老代,收集器的设置参数也是有区别的,如下:
the following collectors operate on the young generation:
-XX:+UseSerialGC
-XX:+UseParallelGC
-XX:+UseParNewGC
the following collectors operate on the old generation:
-XX:+UseParallelOldGC
-XX:+UseConcMarkSweepGC
同一代的参数只能设置一个,-XX:+UseParNewGC和-XX:+UseConcMarkSweepGC是推荐的一个组合。
参考资料:Memory Management in the Java HotSpot™ Virtual Machine
- JVM垃圾收集器异同
- JVM垃圾收集器异同
- JVM垃圾收集器异同
- JVM垃圾收集器异同
- JVM学习笔记(九)--- JVM垃圾收集器异同(再谈)
- JVM垃圾收集器
- JVM垃圾收集器
- JVM-垃圾收集器
- JVM垃圾收集器
- JVM垃圾收集器
- jvm 垃圾收集器
- 【JVM】垃圾收集器
- JVM 垃圾收集器
- JVM-垃圾收集器
- JVM > 垃圾收集器
- JVM--垃圾收集器
- JVM垃圾收集器
- JVM垃圾收集器
- 前后台传值问题 二
- Struts2源码阅读--请求流程
- 9. 11. 30. 从asList到toArray转换 -Convert a List (ArrayList) to an Array with zero length array
- 修改oracle字符编码
- 配置主键自动增长
- JVM垃圾收集器异同
- Xcode修改生成的源文件版权信息,作者和公司名称__MyCompanyName__
- 一道概率题
- C++文件操作,数据读写总结
- getaddrinfo函数
- android截取屏幕图
- 一个弱事件监听器的实现(适用于.net和silverlight)
- Xmanager配置使用
- 什么是注入式攻击 彻底堵死SQL注入工具漏洞