JVM设置过程中的一般的规范

在JVM的设置中,年轻代的设置比较的重要,因为年轻代存储空间分配的比较的块,可以说触发GC的机会比较的大。

默认的情况下:-XX:NewRatio  默认为2 说明:年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代),设置为2,则年轻代与年老代所占比值为1:2,年轻代占整个堆的1/3

-Xmx:设置JVM最大可用内存。

-Xms:设置JVM最小可用内存。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

-Xmn:设置年轻代大小。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般
固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推
荐配置为整个堆的3/8。

-XX:NewSize=n:设置年轻代大小
     -XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
     -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
     -XX:MaxPermSize=n:设置持久代大小

吞吐量优先的并行收集器:

-XX:+UseParallelGC:选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述配置下,年轻
代使用并发收集,而年老代仍旧使用串行收集。
     -XX:ParallelGCThreads=20:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。
此值最好配置与处理器数目相等。

-XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集。

-XX:MaxGCPauseMillis=100:设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会
自动调整年轻代大小,以满足此值。

响应时间优先的并发收集器:

-XX:+UseConcMarkSweepGC:设置年老代为并发收集。测试中配置这个以后,-XX:NewRatio=4
的配置失效了,原因不明。所以,此时年轻代大小最好用-Xmn设置。
     -XX:+UseParNewGC: 设置年轻代为并行收集。可与CMS收集同时使用。JDK5.0以上,JVM会根据
系统配置自行设置,所以无需再设置此值。

-XX:CMSFullGCsBeforeCompaction:由于并发收集器不对内存空间进行压缩、整理,所以运行一
段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、
整理。
    -XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩。可能会影响性能,但是可以消除
碎片

辅助的信息:

JVM提供了大量命令行参数,打印信息,供调试使用。主要有以下一些:

-XX:+PrintGC
     -XX:+PrintGCDetails
     -XX:+PrintGCTimeStamps

-Xloggc:filename

调优总结
     年轻代大小选择
     响应时间优先的应用:尽可能设大,直到接近系统的最低响应时间限制(根据实际情况选择)。在此种情况下,年轻代收集发生的频率也是最小的。同时,减少到达年老代的对象。
     吞吐量优先的应用:尽可能的设置大,可能到达Gbit的程度。因为对响应时间没有要求,垃圾收集可以并行进行,一般适合8CPU以上的应用。

年老代大小选择
     响应时间优先的应用:年老代使用并发收集器,所以其大小需要小心设置,一般要考虑并发会话率和会话持续时间等一些参数。如果堆设置小了,可以会造成内存碎片、高回收频率以及应用暂停而使用传统的标记清除方式;如果堆大了,则需要较长的收集时间。最优化的方案,一般需要参考以下数据获得:
      1. 并发垃圾收集信息
      2. 持久代并发收集次数

3. 传统GC信息
     4. 花在年轻代和年老代回收上的时间比例减少,一般会提高应用的效率。

最新文章

  1. android studio乱码
  2. ORDER BY 1,2 desc
  3. EF实体框架之CodeFirst八
  4. 报课系统APP
  5. 个人收集(转载)CSS中 display:none和visibility:hidden的区别
  6. Centos 7配置ntp时间同步
  7. CentOS 6.0 缺少 mcrypt 扩展 解决办法
  8. CSS——伪元素与伪类
  9. 关于java IO 过程当中同时读写的问题
  10. Eclipse项目导入Android Stuio 配置出现 Timeout waiting to lock buildscript class cache for build file 'H:\studioproject\Generic_SN\build.gradle'
  11. Delphi的指针(转)
  12. iOS开发之Autolayout
  13. java反射 顺序输出类中的方法
  14. 我的IT开源之路
  15. xml文件的规则
  16. linux 学习笔记 finding people
  17. ORACLE环境变量定义.md
  18. Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools"
  19. Android studio快捷键设置
  20. prisma 服务器端订阅试用

热门文章

  1. linux内存管理--slab及其代码解析
  2. 数据库中的schema概念
  3. Xcode7真机测试
  4. Javascript:数组和字符串的相互转化
  5. using namespace cocos2d;
  6. android常用软件下载资源链接
  7. (转)介绍几个C#正则表达式工具
  8. 武汉科技大学ACM :1008: 零起点学算法58——开灯问题
  9. hibernate级联保存,更新个人遇到的问题
  10. JQuery原理介绍及学习方法