0°

JVM之性能调优

堆内存调优

一般来说,堆越大越好

  1. 堆越大降低GC频率,但过大可能会增加单词GC的时间
  2. 对象更有可能成为垃圾

受硬件和操作系统限制

  1. 32位操作系统单个进程的最大可用内存为2G,64位无限制
  2. 小心平衡 New 和 Old 的比例

配置参数

  1. -Xms=2048MB:堆的最小值
  2. -Xmx=2048MB:堆的最大值,将最大值与最小值一致是为了避免回收
  3. 堆每次调整都会出发一次Full GC

如果内存允许,设置-Xmx为比-Xms更大的数值,以防万一

  1. 也许系统负载比你想的更重
  2. 随着时间的推移,数据量越来越大
  • 进行一次Full GC堆调整总比发生OOM要好

新生代大小调优

增大Eden伊甸园区的大小会发生什么?

  1. 可以降低Minor GC小GC的频率
  2. 但不一定会增大Minor GC的时间(Minor GC的耗时和要拷贝的对象数量,即存活对象多少成正比)

参数

-XX:NewSize=512MB                          #新生代初始大小,
-XX:MaxNewSize=512MB                       #新生代最大值
-XX:NewRatio=2                             #设置新生代(Eden与Survivor区域)和旧生代的比值,假如整个堆内存为2G,设置的比值为1,则占据整个堆内存的2/3(1365MB),如果设置比值设置为2,则占据整个堆内存的3/1(682MB),一般情况下,不允许-XX:Newratio值小于1,即Old要比Yong大。
-Xmn=512MB                                 #新生代大小,由于出于性能考虑,一般使用-Xmn来固定新生代的大小
-Xss128k                                   #设置每个线程的堆栈大小。JDK1.5以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

整个堆内存大小减去新生代大小等于旧生代大小
2048-512=1536







「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
JVM
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论