JVM参数

通用JVM参数
-server
如果不配置该参数,JVM 会根据应用服务器硬件配置自动选择不同模式,server 模式启动比较慢,但是运行期速度得到了优化,适合于服务器端运行的 JVM。
-client
启动比较快,但是运行期响应没有 server 模式的优化,适合于个人 PC 的服务开发和测试。
-Xmx
设置 java heap 的最大值,默认是机器物理内存的 1/4。这个值决定了最多可用的 Java 堆内存:分配过少就会在应用中需要大量内存作缓存或者临时对象时出现 OOM(Out Of Memory)的问题;如果分配过大,那么就会因 PermSize 过小而引起的另外一种 Out Of Memory。所以如何配置还是根据运行过程中的分析和计算来确定,如果不能确定还是采用默认的配置。
-Xms
设置 Java 堆初始化时的大小,默认情况是机器物理内存的 1/64。这个主要是根据应用启动时消耗的资源决定,分配少了申请起来会降低运行速度,分配多了也浪费。
-XX:PermSize
初始化永久内存区域大小。永久内存区域全称是 Permanent Generation space,是指内存的永久保存区域,程序运行期不对 PermGen space 进行清理,所以如果你的 APP 会 Load 很多 Class 的话,就很可能出现 PermGen space 错误。这种错误常见在 web 服务器对 JSP 进行 pre compile的时候。如果你的 WEB APP 下用了大量的第三方 jar,其大小超过了 jvm 默认的 PermSize 大小(4M)那么就会产生此错误信息了。
-XX:MaxPermSize
设置永久内存区域最大大小。
-Xmn
直接设置青年代大小。整个 JVM 可用内存大小=青年代大小 + 老年代大小 + 持久代大小。持久代一般固定大小为 64m,所以增大年轻代后,将会减小老年代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的 3/8。
-XX:NewRatio
控制默认的 Young 代的大小,例如,设置 -XX:NewRatio=3 意味着 Young 代和老年代的比率是1:3。换句话说,Eden 和 Survivor 空间总和是整个堆大小的 1/4。
-XX:SurvivorRatio
设置年轻代中 Eden 区与 Survivor 区的大小比值。设置为 4,则两个 Survivo r区与一个 Eden 区的比值为 2:4,一个 Survivor 区占整个年轻代的 1/6。越大的 survivor 空间可以允许短期对象尽量在年青代消亡;如果 Survivor 空间太小,Copying 收集将直接将其转移到老年代中,这将加快老年代的空间使用速度,引发频繁的完全垃圾回收。
-XX:NewSize
为了实现更好的性能,您应该对包含短期存活对象的池的大小进行设置,以使该池中的对象的存活时间不会超过一个垃圾回收循环。新生成的池的大小由 NewSize 和 MaxNewSize 参数确定。通过这个选项可以设置 Java 新对象生产堆内存。在通常情况下这个选项的数值为 1024 的整数倍并且大于 1MB。这个值的取值规则为,一般情况下这个值 -XX:NewSize 是最大堆内存(maximum heap size)的四分之一。增加这个选项值的大小是为了增大较大数量的短生命周期对象。增加Java新对象生产堆内存相当于增加了处理器的数目。并且可以并行地分配内存,但是请注意内存的垃圾回收却是不可以并行处理的。作用跟-XX:NewRatio相似, -XX:NewRatio是设置比例而-XX:NewSize是设置精确的数值。
-XX:MaxNewSize
通过这个选项可以设置最大 Java 新对象生产堆内存。通常情况下这个选项的数值为 1024 的整数倍并且大于 1MB,其功用与上面的设置新对象生产堆内存 -XX:NewSize 相同。一般要将 NewSize和 MaxNewSize 设成一致。
-XX:MaxTenuringThreshold
设置垃圾最大年龄。如果设置为 0 的话,则年轻代对象不经过 Survivor 区,直接进入老年代。对于老年代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor 区进行多次复制,这样可以增加对象在年轻代的存活时间,增加在年轻代即被回收的概率。-XX:MaxTenuringThreshold 参数被设置成 5,表示对象会在 Survivor 区进行 5 次复制后如果还没有被回收才会被复制到老年代。
-XX:GCTimeRatio
设置垃圾回收时间占程序运行时间的百分比。该参数设置为 n 的话,则垃圾回收时间占程序运行时间百分比的公式为 1/(1+n),如果 n=19 表示 java 可以用 5% 的时间来做垃圾回收,1/(1+19)=1/20=5%。
-XX:TargetsurvivorRatio
该值是一个百分比,控制允许使用的救助空间的比例,默认值是 50。该参数设置较大的话可提高对 survivor 空间的使用率。当较大的堆栈使用较低的 SurvivorRatio 时,应增加该值到 80 至90,以更好利用救助空间。
-Xss
设置每个线程的堆栈大小,根据应用的线程所需内存大小进行调整,在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在 3000~5000 左右。当这个选项被设置的较大(>2MB)时将会在很大程度上降低系统的性能。因此在设置这个值时应该格外小心,调整后要注意观察系统的性能,不断调整以期达到最优。JDK5.0 以后每个线程堆栈大小为 1M,以前每个线程堆栈大小为 256K。
-Xnoclassgc
这个选项用来取消系统对特定类的垃圾回收。它可以防止当这个类的所有引用丢失之后,这个类仍被引用时不会再一次被重新装载,因此这个选项将增大系统堆内存的空间。禁用类垃圾回收,性能会高一点。
串行收集器参数
-XX:+UseSerialGC
设置串行收集器 。
并行收集器参数
-XX:+UseParallelGC
选择垃圾收集器为并行收集器,此配置仅对年轻代有效,即上述配置下,年轻代使用并行收集,而老年代仍旧使用串行收集。采用了多线程并行管理和回收垃圾对象,提高了回收效率,提高了服务器的吞吐量,适合于多处理器的服务器。
-XX:ParallelGCThreads
配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。
-XX:+UseParallelOldGC
采用对于老年代并发收集的策略,可以提高收集效率。JDK6.0 支持对老年代并行收集。
-XX:MaxGCPauseMillis
设置每次年轻代并行收集最大暂停时间,如果无法满足此时间,JVM 会自动调整年轻代大小以满足此值。
-XX:+UseAdaptiveSizePolicy
设置此选项后,并行收集器会自动选择年轻代区大小和相应的 Survivor 区比例,以达到目标系统规定的最低响应时间或者收集频率等,此值建议使用并行收集器时,一直打开。
并发收集器参数
-XX:+UseConcMarkSweepGC
指定在老年代使用 concurrent cmark sweep gc。gc thread 和 app thread 并行(在 init-mark 和 remark 时 pause app thread)。app pause 时间较短,适合交互性强的系统,如 web server。它可以并发执行收集操作,降低应用停止时间,同时它也是并行处理模式,可以有效地利用多处理器的系统的多进程处理。
-XX:+UseParNewGC
指定在 New Generation 使用 parallel collector, 是 UseParallelGC 的 gc 的升级版本,有更好的性能或者优点,可以和 CMS gc 一起使用。
-XX:+UseCMSCompactAtFullCollection
打开对老年代的压缩。可能会影响性能,但是可以消除碎片,在 FULL GC 的时候,压缩内存,CMS 是不会移动内存的,因此,这个非常容易产生碎片,导致内存不够用,因此,内存的压缩这个时候就会被启用。增加这个参数是个好习惯。
-XX:+CMSIncrementalMode
设置为增量模式。适用于单 CPU 情况。
-XX:CMSFullGCsBeforeCompaction
由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次 GC 以后对内存空间进行压缩、整理。
-XX:+CMSClassUnloadingEnabled
使 CMS 收集持久代的类,而不是 full gc。
-XX:+CMSPermGenSweepingEnabled
使 CMS 收集持久代的类,而不是 full gc。
-XX:-CMSParallelRemarkEnabled
在使用 UseParNewGC 的情况下 , 尽量减少 mark 的时间。
-XX:CMSInitiatingOccupancyFraction
说明老年代到百分之多少满的时候开始执行对老年代的并发垃圾回收(CMS),这个参数设置有很大技巧,基本上满足公式:
(Xmx-Xmn)(100-CMSInitiatingOccupancyFraction)/100 >= Xmn
时就不会出现 promotion failed。在我的应用中 Xmx 是 6000,Xmn 是 500,那么 Xmx-Xmn 是5500 兆,也就是老年代有 5500 兆,CMSInitiatingOccupancyFraction=90 说明老年代到 90% 满的时候开始执行对老年代的并发垃圾回收(CMS),这时还剩 10% 的空间是 5500
10%=550 兆,所以即使Xmn(也就是年轻代共 500 兆)里所有对象都搬到老年代里,550 兆的空间也足够了,所以只要满足上面的公式,就不会出现垃圾回收时的 promotion failed;
如果按照 Xmx=2048,Xmn=768 的比例计算,则 CMSInitiatingOccupancyFraction 的值不能超过40,否则就容易出现垃圾回收时的 promotion failed。
-XX:+UseCMSInitiatingOccupancyOnly
指示只有在老年代在使用了初始化的比例后 concurrent collector 启动收集。
-XX:SoftRefLRUPolicyMSPerMB
相对于客户端模式的虚拟机(-client选项),当使用服务器模式的虚拟机时(-server选项),对于软引用(soft reference)的清理力度要稍微差一些。可以通过增大 -XX:SoftRefLRUPolicyMSPerMB 来降低收集频率。默认值是 1000,也就是说每秒一兆字节。Soft reference 在虚拟机中比在客户集中存活的更长一些。其清除频率可以用命令行参数 -XX:SoftRefLRUPolicyMSPerMB= 来控制,这可以指定每兆堆空闲空间的 soft reference 保持存活(一旦它不强可达了)的毫秒数,这意味着每兆堆中的空闲空间中的 soft reference 会(在最后一个强引用被回收之后)存活1秒钟。注意,这是一个近似的值,因为 soft reference 只会在垃圾回收时才会被清除,而垃圾回收并不总在发生。
-XX:LargePageSizeInBytes
内存页的大小,不可设置过大,会影响 Perm 的大小。
-XX:+UseFastAccessorMethods
原始类型的快速优化,get,set 方法转成本地代码。
-XX:+DisableExplicitGC
禁止 java 程序中的 full gc, 如 System.gc() 的调用。最好加上防止程序在代码里误用了,对性能造成冲击。
-XX:+AggressiveHeap
试图是使用大量的物理内存
长时间大内存使用的优化,能检查计算资源(内存, 处理器数量)
至少需要 256 MB内存
大量的CPU/内存,(在1.4.1在4CPU的机器上已经显示有提升)
-XX:+AggressiveOpts
加快编译。
-XX:+UseBiasedLocking
锁机制的性能改善。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值