JVM参数调优(一)

  
 <代码>过了段时间没写日志了,今天有空写下、下面写的是jvm相关的概念及调优,开发的朋友平时可以读读其他的书,比如散文方面,为人处世方面的。 
  

1, - xx: + PrintGC每次触发GC的时候打印相关日志
- xx: + UseSerialGC串行回收
- xx: + PrintGCDetails更详细的GC日志
xms堆初始值
- xmx堆最大可用值
厦门新生代堆最大可用值
- xx: SurvivorRatio用来设置新生代中伊甸园空间和从/到空间的比例。
- xx: NewRatio配置新生代与老年代占比1:2
含以- xx: SurvivorRatio=伊甸园/从=窝/
总结:在实际工作中,我们可以直接将初始的堆大小与最大堆大小相等,
这样的好处是可以减少程序运行时垃圾回收次数,从而提高效率。
- xx: SurvivorRatio用来设置新生代中伊甸园空间和从/到空间的比例。

  

2,虚拟机栈溢出
错误原因:. lang。StackOverflowError栈内存溢出
栈溢出产生于递归调用,循环遍历是不会的,但是循环方法里面产生递归调用,也会发生栈溢出。
解决办法:设置线程最大调用深度
-Xss5m设置最大调用深度

  

3,内存溢出与内存泄漏区别
Java内存泄漏就是没有及时清理内存垃圾,导致系统无法再给你提供内存资源(内存资源耗尽),
Java内而存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。
内存溢出,这个好理解,说明存储空间不够大。就像倒水倒多了,从杯子上面溢出了来了一样。
内存泄漏,原理是,使用过的内存空间没有被及时释放,长时间占用内存,最终导致内存空间不足,而出现内存溢出。

  

4串行与并行收集器
串行回收:JDK1.5前的默认算法缺点是只有一个线程,执行垃圾回收时程序停止的时间比较长
并行回收:多个线程执行垃圾回收适合于吞吐量的系统,回收时系统会停止运行

  

5,连续收集器
串行收集器是最古的老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收。新生代,老年代使用串行回收;新生代复制算法,老年代标记——压缩;垃圾收集的过程中会停止世界(服务暂停)

  

6,一个单线程的收集器,在进行垃圾收集时候,必须暂停其他所有的工作线程直到它收集结束。
特点:CPU利用率最高,停顿时间即用户等待时间比较长。
适用场景:小型应用
通过JVM参数- xx: + UseSerialGC可以使用串行垃圾回收器。

JVM参数调优(一)