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相关资源:虚拟机优化