本文将教大家如何进行JVM参数配置JVM提供了大量命令行参数大家可以将本文打印下来作为资料备查最后还将为大家讲解如何进行调优相信你一定会感兴趣的 高手教大家如何进行JVM参数配置 堆大小设置 JVM中最大堆大小有三方面限制相关操作系统的数据模型(bt还是bit)限制系统的可用虚拟内存限制系统的可用物理内存限制位系统下一般限制在G~G;为操作系统对内存无限制我在WindowsServer系统G物理内存JDK下测试最大可设置为m 典型JVM参数配置 javaXmxmXmsmXmngXssk Xmxm:设置JVM最大可用内存为M Xmsm:设置JVM促使内存为m此值可以设置与Xmx相同以避免每次垃圾回收完成后JVM重新分配内存 Xmng:设置年轻代大小为G整个堆大小=年轻代大小+年老代大小+持久代大小持久代一般固定大小为m所以增大年轻代后将会减小年老代大小此值对系统性能影响较大Sun官方推荐配置为整个堆的/ Xssk:设置每个线程的堆栈大小JDK以后每个线程堆栈大小为M以前每个线程堆栈大小为K更具应用的线程所需内存大小进行调整在相同物理内存下减小这个值能生成更多的线程但是操作系统对一个进程内的线程数还是有限制的不能无限生成经验值在~左右 javaXmxmXmsmXssk XX:NewRatio=XX:SurvivorRatio= XX:MaxPermSize=mXX:MaxTenuringThreshold= XX:NewRatio=:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)设置为则年轻代与年老代所占比值为:年轻代占整个堆栈的/ XX:SurvivorRatio=:设置年轻代中Eden区与Survivor区的大小比值设置为则两个Survivor区与一个Eden区的比值为:一个Survivor区占整个年轻代的/ XX:MaxPermSize=m:设置持久代大小为m XX:MaxTenuringThreshold=:设置垃圾最大年龄如果设置为的话则年轻代对象不经过Survivor区直接进入年老代对于年老代比较多的应用可以提高效率如果将此值设置为一个较大值则年轻代对象会在Survivor区进行多次复制这样可以增加对象再年轻代的存活时间增加在年轻代即被回收的概论 回收器选择 JVM给了三种选择串行收集器并行收集器并发收集器但是串行收集器只适用于小数据量的情况所以这里的选择主要针对并行收集器和并发收集器默认情况下JDK以前都是使用串行收集器如果想使用其他收集器需要在启动时加入相应参数JDK以后JVM会根据当前系统配置进行判断 吞吐量优先的并行收集器 如上文所述并行收集器主要以到达一定的吞吐量为目标适用于科学技术和后台处理等 典型JVM参数配置 javaXmxmXmsmXmngXssk XX:+UseParallelGCXX:ParallelGCThreads= XX:+UseParallelGC:选择垃圾收集器为并行收集器此配置仅对年轻代有效即上述配置下年轻代使用并发收集而年老代仍旧使用串行收集 XX:ParallelGCThreads=:配置并行收集器的线程数即同时多少个线程一起进行垃圾回收此值最好配置与处理器数目相等 javaXmxmXmsmXmngXsskXX:+UseParallelGCXX:ParallelGCThreads=XX:+UseParallelOldGC XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集JDK支持对年老代并行收集 javaXmxmXmsmXmngXsskXX:+UseParallelGCXX:MaxGCPauseMillis= XX:MaxGCPauseMillis=:设置每次年轻代垃圾回收的最长时间如果无法满足此时间JVM会自动调整年轻代大小以满足此值 javaXmxmXmsmXmngXsskXX:+UseParallelGCXX:MaxGCPauseMillis=XX:+UseAdaptiveSizePolicy XX:+UseAdaptiveSizePolicy:设置此选项后并行收集器会自动选择年轻代区大小和相应的Survivor区比例以达到目标系统规定的最低相应时间或者收集频率等此值建议使用并行收集器时一直打开 响应时间优先的并发收集器 如上文所述并发收集器主要是保证系统的响应时间减少垃圾收集时的停顿时间适用于应用服务器电信领域等 典型JVM参数配置 javaXmxmXmsmXmngXssk XX:ParallelGCThreads= XX:+UseConcMarkSweepGCXX:+UseParNewGC XX:+UseConcMarkSweepGC:设置年老代为并发收集测试中配置这个以后XX:NewRatio=的配置失效了原因不明所以此时年轻代大小最好用Xmn设置 XX:+UseParNewGC:设置年轻代为并行收集可与CMS收集同时使用JDK以上JVM会根据系统配置自行设置所以无需再设置此值 javaXmxmXmsmXmngXsskXX:+UseConcMarkSweepGCXX:CMSFullGCsBeforeCompaction=XX:+UseCMSCompactAtFullCollection XX:CMSFullGCsBeforeCompaction:由于并发收集器不对内存空间进行压缩整理所以运行一段时间以后会产生碎片使得运行效率降低此值设置运行多少次GC以后对内存空间进行压缩整理 XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩可能会影响性能但是可以消除碎片 |