jvm的调整没什么技巧,只有一些原则,要根据自己应用的特点来设定调优的目标,这里收集了一些内容,权当记录
Java heap (Xmx, Xms) 和java进程的heap是两回事情
java进程的heap包含:
Java Heap
Permanent Generation
Thread stacks
Native code
Directly allocated memory
Code generation
Garbage collection
TCP buffers
因此我们在设置,jvm参数的时候得小心一点,一般我们会设置java heap 和 perm gen,结合操作系统内存的大小和应用特点,选取一个合理的值。
-Xms/-Xmx
java heap并不是越大越好,对他的一般优化原则是够用的情况下,尽可能的小,因为太大的话会浪费内存,同时影响GC的效率
-XX:NewSize/-XX:NewRatio
一般设置为java heap的25%-33%,太大或者太小都会影响GC,要根据应用的特点,对象生命长短周期的比例来调整
GC相关调整的目标:
* 短生命周期的对象不要进入Old区
* 短生命周期的对象在minor GC的时候干掉
* 长生命周期的对象要放到Old区
* 长生命周期的对象可以被Full GC清理掉,但是Full GC要调整到尽量少发生
不管采用什么算法,GC总是会导致应用暂停的,这个时间长短从毫秒到秒之间不等,因此会影响应用的相应时间,多长的停顿在接受范围内取决于应用的特征,可以通过设置GC停顿的时间来调整(注意只是期望的时间,而不是绝对)
-XX:MaxGCPauseMillis -XX:MaxGCMinorPauseMillis ,一般设置比较短的停顿时间会导致相对较频繁的GC,根据应用的情况来调整
更多的jvm参数请见:
A Collection of JVM Options