这一节主要讨论的是JVM如何自动的优化GC时间
此时的内容只是粗略的翻译加个人理解,勿看
Topic
Garbage-Collector、Heap、runtime-compiler默认选项
- 默认选择G1收集器(如何知道GC使用的GC收集器有哪些?)
- GC线程数的最大值是由heap的大小以及可用的CPU数量来决定的(这几个概是以怎样的方式关联上的?)
- 初始的堆大小是物理内存的1/64
- 堆的最大值不超过物理内存的1/4
- Tired Compiler, using both C1 and C2 ? </font color=red> 没理解
GC基于目标的自动调整策略(Behavior-Base Tuning)
- Garbage-Collector可以提供了两个配置选项,通过配置这三个配置选项可以影响到GC的时间
- Maximum Pause-Time Goal
- pause-time的定义:Garbage-Collector收集和清理废弃内存时,暂停application运行所耗费的时间,从线性收集器来说,这部分就是GC时间
- Maximum Pase-Time的意义:通过设置GC时间的上线
- 设置方式:-XX:MaxGCPauseMillis=
- 影响:这个值设置后,Garbage-Collector会去调整heap大小和其它跟GC时间相关的参数来保证GC时间不超过这个值,这些动作有可能导致频繁的GC
- Throughput Goal (GC时间占比)
- 定义:GC时间占比。(原文是:the throughput goal is measured in terms of the time spent collecting garbage, and the time spent outside of garbage collection is the application time)
- 设置方式:-XX:GCTimeRatio=nnn。举例:-XX:GCTimeRatio=19 意味着,1/(1+19),GCTime占总时间的5%
- 影响:如果这个目标没有达到,GC会自动的增加heap的大小
- Footprint
- 堆最小值:-Xms=、堆最大值:-Xmx=
- 如果Maximum Pause-Time Goal和Throughput Goal两个目标都达到了,也会触发GC调整堆大小来避免两个目标同时达到阈值,上述两个参数可以控制Heap大小的范围
- Maximum Pause-Time Goal
- 调整策略
- 不要设置Xmx,除非你肯定你需要的Heap资源大于默认值
- Throughput Goal的设置已经能够满足绝大部分的应用需求
- MaxGCPauseMillis和Throughput的设置可能会导致heap的增加或者减少
- 如果Throughput没有达到预期&&Heap size == maximum siez,则说明Heap size太小
- 如果Throughput goal达到了阈值,但是pause time 太长,可以选择设置maximum-pasuse-time
参考文章
- https://www.jianshu.com/p/c3a8a108da00