AdrianHu99 / NOTES

0 stars 0 forks source link

JVM 调优(学习篇) #24

Closed AdrianHu99 closed 5 years ago

AdrianHu99 commented 5 years ago

https://mp.weixin.qq.com/s/Po45tsGSuoftUgWbJGlZOQ

AdrianHu99 commented 5 years ago

-XX:AutoBoxCacheMax integer本来-128 到127 在cache里,可以通过这个更改,如-XX:AutoBoxCacheMax=20000

-XX:+AlwaysPreTouch JAVA进程启动的时候,虽然我们可以为JVM指定合适的内存大小,但是这些内存操作系统并没有真正的分配给JVM,而是等JVM访问这些内存的时候,才真正分配,这样会造成以下问题。 1、GC的时候,新生代的对象要晋升到老年代的时候,需要内存,这个时候操作系统才真正分配内存,这样就会加大young gc的停顿时间; 2、可能存在内存碎片的问题。

CMSInitiatingOccupancyFraction 那么当老年代堆空间的使用率达到75%的时候就开始执行垃圾回收,CMSInitiatingOccupancyFraction默认值是92%,这个就太大了。

MaxTenuringThreshold 默认情况下,当新生代执行了15次young gc后,如果还有对象存活在Survivor区中,那么就可以直接将这些对象晋升到老年代,但是由于新生代使用copy算法,如果Survivor区存活的对象太久的话,Survivor区存活的对象就越多,这个就会影响copy算法的性能,使得young gc停顿的时间加长,建议设置成6。

ExplicitGCInvokesConcurrent 这个参数来改变System.gc()的行为,让其从full gc --> CMS GC,CMS GC是并发收集的,且中间执行的过程中,只有部分阶段需要stop the world。

-Xmx, -Xms

NewRatio GC最多的还是发生在新生代的young gc,所以可以提高一下新生代在整个堆的占用比例,建议设置为对半分,尽量避免young gc