JVM毕竟不是智能的,因此咱们要根据实际的运行机器,实际业务等状况选择合适的参数去优化JVM下面我讲一些简单的参数列下来,这些参数的使用须要先理解JVM内存模型,垃圾回收机制.java
当堆须要扩展的时内存不够会报 OutOfMemeryError: Heap(堆内存溢出) ,这时可能设置堆大小参数:服务器
-Xms=10M 设置堆的最小大小
多线程
-Xmx=20M 设置堆的最大大小
优化
-Xmn=3M 设置年轻代的大小,若是设置太大会致使老年代过小,因此官方推荐为整个堆的3/8大小
ui
-XX:HeapDumpPath=E:\Java\dump 设置堆转储文件的地址spa
-XX:+HeapDumpOnOutOfMemoryError 当发生堆内存溢出的时候生成堆转储文件,能够经过分析堆转储文件来找到溢出的缘由线程
2.在常常动态生成大量Class的应用中,如使用Cglib加强,动态语言,大量Jsp文件 时,可能报OutOfMemeryError:PerGen space(方法区溢出).
日志
-XX:PermSize:10M 设置方法区最小大小 //红薯告诉我1.8的JDK已经把这个参数废弃了server
-XX:MaxPermsize 设置方法去最大大小 //红薯告诉我1.8的JDK已经把这个参数废弃了对象
3.垃圾回收器设置:
-XX:UseSerialGC 新生代使用Serial收集器,老年代使用Serial Old 收集器 .当JVM运行在Client模式下,默认打开.
-XX:UseParNewGC 新生代使用ParNew收集器,老年代使用Serial Old 收集器
-XX:UseConcMarkSweepGC 新生代使用ParNew收集器,老年代使用CMS,Serial Old,当老年代使用CMS出现Concurrent Mode Failure的时候才使用Serial Old收集器
-XX:ParallelGCThreads 因为ParNew收集器是多线程的,默认线程数就是内核数目,能够经过这个指定垃圾收集时线程数目
-XX:UseParallelGC 新生代使用Parallel Scavenge收集器,老年代使用Serial Old收集器,JVM运行在Server模式下,默认开启.
-XX:UseParallelGC 新生代使用Parallel Scavenge收集器,老年代使用Parallel Old收集器
-XX:Maxtenuing Threshold 当新手代对象通过指定的次数就能进入老年代,默认为15.
-XX:printGCDetails 打印垃圾收集的日志
关于JVM的Client和Server模式.JVM有Client和Server模式,在Client模式下,启动比较快,垃圾收集器默认使用Serial + Serial Old.在Server模式下,启动比较慢,默认使用Parallel Scanvenge + Serial Old.Client适用于桌面应用程序,用户线程执行时间长,用户体验好.Server适用于服务器端,吞吐量高.
JVM会根据机器的内存以及CPU数量来判断使用什么模式.经过java -version能够看到JVM使用什么模式.
固然也能够经过-client以及-server来指定JVM运行的模式.