我们用IDEA开发的时候,配置不高的情况下经常会卡顿,这时候估计大家常有的做法,就是百度,参照网上,修改IDEA一系列的配置参数。那JVM中都有哪些常见参数呢?下面就来数一数,二四六七八。
-Xms:初始堆大小
-Xmx:最大堆大小
-XX:NewSize=n:设置年轻代大小
-XX:NewRatio=n:设置年轻代和年老代的比值。如:n=3,表示年轻代与年老代的比值为1:3,年轻代站整个年轻代年老代之和的四分之一。
-XX:SurvivorRatio=n,年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如n=3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的五分之一。
-XX:MaxPermSize=n,设置持久代大小
-XX:+UseSerialGC 设置串行收集器。
-XX:+UseParallelGC 设置并行收集器
-XX:+UseParallelOldGC 设置并行年老代收集器
-XX:+UseConcMarkSweepGC 设置并发收集器
-XX:+PrintGC
-XX:+Printetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
-XX:ParallelGCThreads=n,设置并行收集器收集时使用的CPU数,并行收集线程数。
-XX:MaxGCPauseMillis=n设置并行收集最大暂停时间
-XX:GCTimeRatio=n设置垃圾回收时间占程序运行时间的百分比,公式为 1/ (1+n)
-XX:+CMSIncrementalMode设置为增量模式,适用于单CPU情况。
-XX:ParallelGCThreads=n设置并发收集器年轻代收集方式为并行收集时,适用的CPU数
JVM中最大堆大小有三方面限制:
32位系统下,一般限制在1.5G~2G;64位操作系统对内存无限制。
典型设置:
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k
-Xmx2330m:设置JVM最大可用内存为3550M。
-Xms3550m:设置JVM初始内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn2g:设置年轻代大小为2G。整个堆大小=年轻代大小+年老代大小+持久代大小。持久代,一般固定大小为64m,所有增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐的配置为整个堆的3/8(八分之三)。
-Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m
-XX:MaxTenuringThreshold=0
相同参数参照第一条,不同参数,参照下面:
-XX:NewRatio=4 设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的五分之一。
-XX:SurvivorRatio=4,设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的六分之一。
-XX:MaxPermSize=16m,设置持久代大小为16M。
-XX:MaxTenuringThreshold=0设置垃圾最大年龄。如果设置为0的话,则年轻嗲对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象在年轻代的存活时间,增加在年轻代即被回收的概率。
回收器选择,JVM给了三种选择:串行收集器,并行收集器,并发收集器。但是串行收集器只适用于小数据量的情况,所以这里的选择主要针对并行收集器和并发收集器。默认情况下,JDK5.0以前都适用串行收集器,如果想使用其它的收集器需要在启动时加入相应的参数。JK5.0以后,JVM会根据当前系统配置进行判断,选择用哪个收集器。