JVM参数调优
一.JVM内存模型及JVM参数含义
二.OutOfMemoryException异常
并不是内存耗尽才会抛出OOM异常,当满足以下两个条件将触发OOM:
- JVM98%的时间花费在内存回收
- 每次回收的内存小于2%
三.内存泄漏及解决方法
- 系统崩溃前的现象:GC的时间越来越长;Full GC的次数越来越多;老年代的内存耗尽越来越大
2. 生成堆的dump文件:通过JMX的Mbean生成前的Heap信息,大小为整个堆大小的Hprof文件;通过Java的jmap命令用来生成该文件;通过JVM参数:-XX:+HeapDumpOnOutOfMemoryError 获取该文件
3. 分析dump文件工具:Visual VM;IBM HeapAnalyzer;JDK自带的Hprof工具
4. 分析内存泄漏
四、性能调优(JVM参数)
1.目标:GC的时间足够短;GC的次数足够少;发生Full GC的周期足够小
矛盾点:前两个目标相悖,GC的时间足够短,则需要一个更小的堆;GC的次数足够少,则需要一个更大的堆,只能取其平衡
2.举例:-Xms1024m -Xmx1024m -Xss512K -XX:PermSize=256m -XX:MaxPermSize=256m
-Xms1024m:堆内存的初始值设置为1024m
-Xmx1024m:堆内存的最大值设置为1024m
-Xss512K:每个线程的堆栈大小设置为512K
-XX:PermSize=256m:永久代的初始值设置为256m
-XX:MaxPermSize=256m:永久代的最大值设置为256m
将堆的最大值和最小值设置为相同值,可以防止垃圾收集器在最大、最小之前收缩堆而产生额外的时间。