第5章 Available GC

The Java HotSpot VM includes three different types of collectors, each with different performance characteristics.

Java虚拟机有三种不同类型的gc,他们有不同的特性。

顺序gc

The serial collector uses a single thread to perform all garbage collection work, which makes it relatively efficient because there is no communication overhead between threads. It is best-suited to single processor machines, because it cannot take advantage of multiprocessor hardware, although it can be useful on multiprocessors for applications with small data sets (up to approximately 100 MB). The serial collector is selected by default on certain hardware and operating system configurations, or can be explicitly enabled with the option -XX:+UseSerialGC.

顺序gc使用一个单独的线程来进行所有的垃圾回收工作。由于不需要进行线程间通信,所以相对高效。顺序gc适用于单处理器及有多核处理器的小规模程序。使用命令行参数-XX:+UseSerialGC来明确指定使用顺序gc。

并行gc

The parallel collector (also known as the throughput collector) performs minor collections in parallel, which can significantly reduce garbage collection overhead. It is intended for applications with medium-sized to large-sized data sets that are run on multiprocessor or multithreaded hardware. The parallel collector is selected by default on certain hardware and operating system configurations, or can be explicitly enabled with the option -XX:+UseParallelGC.

并行gc对于minor gc使用并行方式执行,可以大大提高效率。并行gc特别适合于,运行在多核多线程机器上的,中到大型规模的应用程序。使用命令行参数-XX:+UseParallelGC来明确指定使用并行gc。

Parallel compaction is a feature that enables the parallel collector to perform major collections in parallel. Without parallel compaction, major collections are performed using a single thread, which can significantly limit scalability. Parallel compaction is enabled by default if the option -XX:+UseParallelGC has been specified. The option to turn it off is -XX:-UseParallelOldGC

并行gc在进行major gc的时候使用并行压缩技术。如果不使用并行压缩,那么并行gc在进行major gc的时候只能使用单一线程进行回收,这会极大的影响major gc的效能。当指定命令行参数-XX:+UseParallelGC时并行压缩模式默认是打开的,可是使用参数-XX:-UseParallelOldGC来指定并行gc时关闭并行压缩模式。

并发gc

The mostly concurrent collector performs most of its work concurrently (for example, while the application is still running) to keep garbage collection pauses short. It is designed for applications with medium-sized to large-sized data sets in which response time is more important than overall throughput because the techniques used to minimize pauses can reduce application performance. The Java HotSpot VM offers a choice between two mostly concurrent collectors; see The Mostly Concurrent Collectors. Use the option -XX:+UseConcMarkSweepGC to enable the CMS collector or -XX:+UseG1GC to enable the G1 collector.

并发gc是指在程序运行的时间里同时并发进行垃圾回收,这样做的好处在于可以尽可能的缩短程序暂停时间。并发gc适合于多响应时间要求比较高的应用程序。Java虚拟机提供了两种并发gc,使用参数-XX:+UseConcMarkSweepGC来明确指定使用CMS收集器,使用参数-XX:+UseG1GC来明确指定使用G1收集器。

汇总

选择gc

Unless your application has rather strict pause time requirements, first run your application and allow the VM to select a collector. If necessary, adjust the heap size to improve performance. If the performance still does not meet your goals, then use the following guidelines as a starting point for selecting a collector.

除非你的程序有相当严格的暂停时间要求,否则你应当让虚拟机自己决定使用gc的类型。提升性能的首选应该是调整堆的大小。如果调整堆的大小不能带来显著的性能提升,那么根据如下原则来进行gc的选择:

If the application has a small data set (up to approximately 100 MB), then

select the serial collector with the option -XX:+UseSerialGC.

如果程序使用的数据集合在100MB左右,那么选择-XX:+UseSerialGC顺序gc即可。

If the application will be run on a single processor and there are no pause time requirements, then let the VM select the collector, or select the serial collector with the option -XX:+UseSerialGC.

如果应用程序运行在单核处理器系统上,并且没有暂停时间的需求,应当让虚拟机自动选择gc,或者使用顺序收集器

If (a) peak application performance is the first priority and (b) there are no pause time requirements or pauses of 1 second or longer are acceptable, then let the VM select the collector, or select the parallel collector with -XX:+UseParallelGC.

如果程序性能是首要需求,并且程序的暂停时间稍长可以被接受,那么应当让虚拟机选择gc类型,或者使用并行gc。

If response time is more important than overall throughput and garbage collection pauses must be kept shorter than approximately 1 second, then select the concurrent collector with -XX:+UseConcMarkSweepGC or -XX:+UseG1GC.

如果程序的响应时间是关键因素,并且要求尽可能短的暂停,那么应当选择并发gc,使用-XX:+UseConcMarkSweepGC或者-XX:+UseG1GC指令。

Java 8 VM GC Tunning Guide Charter 5的更多相关文章

  1. Java 8 VM GC Tunning Guide Charter 6

    第六章 并行GC The Parallel Collector The parallel collector (also referred to here as the throughput coll ...

  2. Java 8 VM GC Tunning Guide Charter 7-8-b

    第七章 并发gc Java 8提供两种并发gc,CMS和G1 Concurrent Mark Sweep (CMS) Collector This collector is for applicati ...

  3. Java 8 VM GC Tunning Guild Charter 9-b

    第九章 G1 GC The Garbage-First (G1) garbage collector is a server-style garbage collector, targeted for ...

  4. Java 8 VM GC Tuning Guide Charter3-4

    第三章 Generations One strength of the Java SE platform is that it shields the developer from the compl ...

  5. Java 8 VM GC Tuning Guide Charter2

    第二章 Ergonomics Ergonomics is the process by which the Java Virtual Machine (JVM) and garbage collect ...

  6. JVM:从实际案例聊聊Java应用的GC优化

    原文转载自美团从实际案例聊聊Java应用的GC优化,感谢原作者的贡献 当Java程序性能达不到既定目标,且其他优化手段都已经穷尽时,通常需要调整垃圾回收器来进一步提高性能,称为GC优化.但GC算法复杂 ...

  7. 并发测试 java.lang.OutOfMemoryError: GC overhead limit exceeded Xms Xmx 阻塞请求 单节点 请求分发 负载均衡

    at javax.servlet.http.HttpServlet.service(HttpServlet.java:705) at javax.servlet.http.HttpServlet.se ...

  8. java虚拟机(十三)--GC调优思路

    GC调优对我们开发人员来说,如果你想要技术方面一直发展下去,这部分内容的了解是必不可少的,jvm对于工作.面试来说都很重要,GC调优的问题 更是重中之重,因为是对你jvm学习内容的实践,知识只有应用实 ...

  9. JAVA中的GC机制详解

    优秀Java程序员必须了解的GC工作原理 一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只 ...

随机推荐

  1. 如何提高手机APP的用户体验?

    详细内容请点击 随着移动互联网如日中天,如火如荼的时候,手机APP开发日益高涨了起来,关于手机APP的用户体验,也是一个老话长谈的话题.从事这行业也很久了,以下是我个人在工作中的一些关于APP的用户体 ...

  2. 深入浅出ExtJS 第六章 布局

       6.1 布局的用途 6.1 布局的用途 //决定把什么东西放到什么位置; var vieport = new Ext.Viewport({ layout:'border', //使用Border ...

  3. HTML之正则表达式

    匹配国内电话号码:d{3}-d{8}|d{4}-d{7} 评注:匹配形式如 0511-4405222 或 021-87888822 匹配腾讯QQ号:[1-9][0-9]{4,} 评注:腾讯QQ号从10 ...

  4. jQuery中的事件与动画<思维导图>

    Javascript和HTML之间的交互是通过用户和浏览器操作页面时引发的事件来处理的.当文档或者它的某些元素发生某些变化或操作时,浏览器会自动生成一个事件.例如当浏览器装载完一个文档后,会生成事件. ...

  5. 查询sql 并且读取

    //显示地址 //VBSBegin // Set obj = GetObject("winmgmts:\\.\root\cimv2") // Set IPConfigSet = o ...

  6. JAVA:变量,数据类型,运算符,流程控制(简介)<1>

    一.安装和配置jdk 1.jdk是什么? (1).jdk全称是Java Development Kit, Java开发工具包; (2).jdk是sun公司开发的; (3).jdk主要包括:jre(Ja ...

  7. Aborting a running program

    In the event that a calculation appears to be running excessively long, one can abort thecalculation ...

  8. Fragstats软件使用及其景观生态学意义

    [转]Fragstats软件使用及其景观生态学意义     原文地址:http://blog.163.com/shuailai@126/blog/static/13238040820104152513 ...

  9. 【风马一族_Android】Android 前端内容

    Android 前端内容 4.1 View 类概述 4.1.1 关于 View //类型说明 view(视图)指的是用户界面组件的基本构建基块.一个视图占据屏幕上的矩形区域,负责绘图和事件处理.视图是 ...

  10. 《linux 网卡别名的添加和绑定》RHEL6

    网卡别名的配置: 这个和ifconfig临时修改网卡ip 差不多,但是不一样.都是临时的,只要重启电脑就没了. 配永久的ip别名: cp ifcfg-eth0  ifcfg-eth0:0 vim if ...