jvm 参数
参数 | 作用 | 建议 |
---|---|---|
-Xms | 堆内存最小值 | 与 Xmx 相等,避免每次空间不足,动态扩容带来的影响 |
-Xmx | 堆内存最大值 | 与 Xms 相等,避免每次空间不足,动态扩容带来的影响 |
-Xmn | 新生代大小 | 过小会增加Minor GC频率,过大会减小老年代的大小。一般设为整个堆空间的1/4或1/3. |
-Xss | 每个线程池的堆栈大小 | 在jdk5以上的版本,每个线程堆栈大小为1m,jdk5以前的版本是每个线程池大小为256k。 一般在相同物理内存下,如果减少-xss值会产生更大的线程数,但不同的操作系统对进程内线程数是有限制的,是不能无限生成 |
-XX:NewRatio | 新生代与老年代比值 | -XX:NewRatio=4 表示新生代与老年代所占比例为1:4 ,新生代占比整个堆的五分之一。 如果设置了-Xmn的情况下,该参数是不需要在设置的 |
-XX:PermSize | 非堆区初始值 | 默认是物理内存的六十四分之一 |
-XX:MaxPermSize | 非堆区最大值 | 默认是物理内存的四分之一,一般来说,MaxPermSize设为64MB可以满足绝大多数的应用了。 若依然出现方法区溢出,则可以设为128MB。若128MB还不能满足需求,那么就应该考虑程序优化了 |
-XX:MaxTenuringThreshold | 新生代中对象存活次数,默认15 | |
-XX:SurvivorRatio | Eden区与Subrvivor区大小的比值 | 如果设置为8,两个Subrvivor区与一个Eden区的比值为2:8,一个Survivor区占整个新生代的十分之一 |
-XX:+UseFastAccessorMethods | 原始类型快速优化 | |
-XX:+AggressiveOpts | 编译速度加快 | |
-XX:PretenureSizeThreshold | 对象超过多大值时直接在老年代中分配 |
垃圾收集器参数
参数 | 作用 |
---|---|
-XX:+UseSerialGC | 串行垃圾回收,现在基本很少使用。 |
-XX:+UseParNewGC | 新生代使用并行,老年代使用串行 |
-XX:+UseConcMarkSweepGC | 新生代使用并行,老年代使用CMS(一般都是使用这种方式),CMS是Concurrent Mark Sweep的缩写,并发标记清除,一看就是老年代的算法,所以,它可以作为老年代的垃圾回收器。CMS不是独占式的,它关注停顿时间 |
-XX:ParallelGCThreads | 指定并行的垃圾回收线程的数量,最好等于CPU数量 |
-XX:+DisableExplicitGC | 禁用System.gc(),因为它会触发Full GC,这是很浪费性能的,JVM会在需要GC的时候自己触发GC |
-XX:CMSFullGCsBeforeCompaction | 在多少次GC后进行内存压缩,这个是因为并行收集器不对内存空间进行压缩的,所以运行一段时间后会产生很多碎片,使得运行效率降低 |
-XX:+CMSParallelRemarkEnabled | 降低标记停顿 |
-XX:+UseCMSCompactAtFullCollection | 在每一次Full GC时对老年代区域碎片整理,因为CMS是不会移动内存的,因此会非常容易出现碎片导致内存不够用的 |
-XX:+UseCmsInitiatingOccupancyOnly | 使用手动触发或者自定义触发cms 收集,同时也会禁止hostspot 自行触发CMS GC |
-XX:CMSInitiatingOccupancyFraction | 使用CMS作为垃圾回收,使用70%后开始CMS收集 |
-XX:CMSInitiatingPermOccupancyFraction | 设置perm gen使用达到多少%比时触发垃圾回收,默认是92% |
-XX:+CMSIncrementalMode | 设置为增量模式 |
-XX:+CmsClassUnloadingEnabled | CMS是不会默认对永久代进行垃圾回收的,设置此参数则是开启 |
-XX:+PrintGCDetails | 开启详细GC日志模式,日志的格式是和所使用的算法有关 |
-XX:+PrintGCDateStamps | 将时间和日期也加入到GC日志中 |