Java 8 VM GC Tunning Guide Charter 5
第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的更多相关文章
- Java 8 VM GC Tunning Guide Charter 6
第六章 并行GC The Parallel Collector The parallel collector (also referred to here as the throughput coll ...
- 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 ...
- 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 ...
- 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 ...
- Java 8 VM GC Tuning Guide Charter2
第二章 Ergonomics Ergonomics is the process by which the Java Virtual Machine (JVM) and garbage collect ...
- JVM:从实际案例聊聊Java应用的GC优化
原文转载自美团从实际案例聊聊Java应用的GC优化,感谢原作者的贡献 当Java程序性能达不到既定目标,且其他优化手段都已经穷尽时,通常需要调整垃圾回收器来进一步提高性能,称为GC优化.但GC算法复杂 ...
- 并发测试 java.lang.OutOfMemoryError: GC overhead limit exceeded Xms Xmx 阻塞请求 单节点 请求分发 负载均衡
at javax.servlet.http.HttpServlet.service(HttpServlet.java:705) at javax.servlet.http.HttpServlet.se ...
- java虚拟机(十三)--GC调优思路
GC调优对我们开发人员来说,如果你想要技术方面一直发展下去,这部分内容的了解是必不可少的,jvm对于工作.面试来说都很重要,GC调优的问题 更是重中之重,因为是对你jvm学习内容的实践,知识只有应用实 ...
- JAVA中的GC机制详解
优秀Java程序员必须了解的GC工作原理 一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只 ...
随机推荐
- 转载事务在C#方法里的应用
问题:一个系统的数据库更新或者插入的时候若遭遇到断电等能引起数据库不能正常工作的情况的话,其更新或插入的将是不完整的数据,或者是错误的数据.故需要引入事务处理. 实例:数据更新的事务处理. 解决方案: ...
- Ajax上传文件进度条显示
要实现进度条的显示,就要知道两个参数,上传的大小和总文件的大小 html5提供了一个上传过程事件,在上传过程中不断触发,然后用已上传的大 小/总大小,计算上传的百分比,然后用这个百分比控制div框的显 ...
- JavaScript之菱形打印
很高兴来到博客园!迈入这座知识的殿堂,实是幸运.这是我的第一篇博客,开启丰富有趣的学习之旅,同时,我希望和大家一起学习一起进步,Let‘s go! <!DOCTYPE html PUBLIC & ...
- 如何用C#代码查找某个路径下是否包含某个文件
string path = "f:\\哈哈"; if (Directory.Exists(path)) { MessageBox.Show("存在文件夹") ...
- Handoff使用指南 - 理论篇
Handoff简介 Handoff是iOS 8 和 OS X v10.10中引入的功能,可以让同一个用户在多台设备间传递项目.In iOS 9 and OS X v10.11 支持了Spotlight ...
- OC2-xml文件解析
<?xml version="1.0" encoding="UTF-8"?> <Students class="17班" ...
- Mac下github的使用
新建github账户 新建Repository,如下图: 建立连接github的秘钥 打开mac的shell cd ~ mkdir .ssh cd .ssh ssh-keygen -t rsa ...
- android 网络_网络图片查看器
xml <?xml version="1.0"?> -<LinearLayout tools:context=".MainActivity" ...
- Http和Socket连接区别
相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过自己的浅显理解能对初学者有所帮助. 1.TCP连接 要想明白Socket连接,先要明白TCP连接.手机能够使用联 ...
- How to Fix Missing TortoiseSVN File Status Icons in Windows
For many Windows-based developers, Subversion and TortoiseSVN is a great source control solution. It ...