jvm参数调优_1_参数设置

一、堆栈设置(堆栈大小、堆内存比例):

jvm内存:

物理上:整个堆=新生代+老年代+持久代(方法区);

逻辑上:一般将堆和方法区分开;

-Xms(memory start):初始堆大小,一般初始值可以和最大值设一样,避免GC后内存重新分配。

-Xmx(memory max):最大堆大小。

-Xmn(memory new):新生代大小,此处的大小是(Eden+2 survivor space)。增大新生代将会减小老年代,对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

-Xss(stack size):每个线程的堆栈大小。在相同物理内存下,减小这个值能生成更多的线程。但操作系统对一个进程内的线程数是有限制的,不能无限生成,经验值在3000~5000左右。一般小的应用,如果栈不是很深,应该是128k够用的,大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。

-XX:ThreadStackSize:跟-Xss类似,二选一,最好不要同时使用。

-XX:NewSize:新生代大小(for 1.3/1.4)

-XX:MaxNewSize:新生代最大值(for 1.3/1.4)

-XX:PermSize:持久代初始值(物理内存的1/64)

-XX:MaxPermSize:持久代最大值(物理内存的1/4)

-XX:NewRatio:新生代(Eden+2 survivor space)与老年代(除去持久代)的比值。-XX:NewRatio=4表示新生代与老年代所占比值为1:4,新生代占整个堆栈的1/5。Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。

-XX:SurvivorRatio:新生代中Eden与survivor的比值。设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10

-XX:MaxTenuringThreshold:垃圾最大年龄。如果设置为0的话,新生代对象不经过Survivor区,直接进入老年代。 对于老年代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则新生代对象会在Survivor区进行多次复制,这样可以增加对象在新生代的存活时间,增加在新生代即被回收的概率。该参数只有在串行GC时才有效。

-XX:PretenureSizeThreshold:对象超过多大时直接在老年代分配,默认值0。单位字节,新生代采用Parallel Scavenge GC时无效。另一种直接在老年代分配的情况是大的数组对象,且数组中无外部引用对象。

-XX:+CollectGen0First:FullGC时是否先YGC,默认值false。

-XX:SoftRefLRUPolicyMSPerMB:每兆堆空闲空间中SoftReference的存活时间,默认1秒。

-XX:LargePageSizeInBytes:内存页的大小,不可设置过大, 会影响Perm的大小

-XX:+UseFastAccessorMethods:原始类型的快速优化

二、回收器设置(回收器选择、回收器线程数、回收时间、内存压缩):

JVM给了三种选择:串行收集器(serial)、并行收集器(parallel)、并发收集器(CMS),但是串行收集器只适用于小数据量的情况,所以这里的选择主要针对并行收集器和并发收集器。

1.吞吐量优先的并行收集器

并行收集器主要以到达一定的吞吐量为目标,适用于科学技术和后台处理等。

典型配置:

-XX:+UseParallelGC:选择垃圾收集器为并行收集器。此配置仅对新生代有效。即上述配置下,新生代使用并发收集,而老年代仍旧使用串行收集。

-XX:+UseParNewGC:设置新生代为并行收集。可与CMS收集同时使用,JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值。

-XX:+UseParallelOldGC:设置老年代为并行收集。这个是JAVA 6出现的参数选项。

-XX:ParallelGCThreads:并行收集器的线程数,即同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。同样适用于CMS。

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

-XX:+UseAdaptiveSizePolicy:自动选择年轻代区大小和相应的Survivor区比例。设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开。

-XX:GCTimeRatio:设置垃圾回收时间占程序运行时间的百分比,公式为1/(1+n)

-XX:+ScavengeBeforeFullGC:Full GC前调用YGC,默认为true

-XX:+DisableExplicitGC:禁止System.gc(),免得程序员误调用gc方法影响性能;

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

并发收集器主要是保证系统的响应时间,减少垃圾收集时的停顿时间。适用于应用服务器、电信领域等。

典型配置:

-XX:+UseConcMarkSweepGC:设置老年代为并发收集。测试中配置这个以后,-XX:NewRatio=4的配置失效了,原因不明。所以,此时年轻代大小最好用-Xmn设置。

-XX:+UseParNewGC:设置年轻代为并行收集。可与CMS收集同时使用。JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值

-XX:CMSFullGCsBeforeCompaction:多少次后进行内存压缩。由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。

-XX:+UseCMSCompactAtFullCollection:在FULL GC的时候,对年老代的压缩。CMS是不会移动内存的,因此,这个非常容易产生碎片,导致内存不够用,因此,内存的压缩这个时候就会被启用。增加这个参数是个好习惯。可能会影响性能,但是可以消除碎片。

-XX:CMSInitiatingOccupancyFraction:设置老年代使用率达到该值时触发CMS垃圾收集。

-XX:CMSInitiatingPermOccupancyFraction:设置Perm Gen使用率达到该值时触发CMS垃圾收集。

-XX:+DisableExplicitGC:禁止System.gc(),免得程序员误调用gc方法影响性能;

-XX:+CMSParallelRemarkEnabled:降低标记停顿。

-XX:+UseCMSInitiatingOccupancyOnly:使用手动定义初始化定义开始CMS收集

三、辅助信息:

JVM提供了大量命令行参数,打印信息,供调试使用。

-XX:+PrintGC

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

-XX:+PrintGCApplicationConcurrentTime:打印每次垃圾回收前,程序未中断的执行时间。可与上面混合使用。

-XX:+PrintGCApplicationStoppedTime:打印垃圾回收期间程序暂停的时间。可与上面混合使用。

-XX:PrintHeapAtGC:打印GC前后的详细堆栈信息

-Xloggc:filename:与上面几个配合使用,把相关日志信息记录到文件以便分析。

并行收集器与并发收集器的区别:

以8核CPU8个线程为例:

并行:8个线程在8个核上同时执行,所以系统一次性处理的数据量比较大,吞吐量比较大;

并发:8个线程在8个核上可能同时执行也可能异步执行,但一旦有新任务到来时一定有线程能快速响应,所以实时性比较好;

jdk1.7之前有PermGen(永久代),1.7开始PermGen变成Metaspace(元空间),Metaspace跟PermGen功能类似,不同的是PermGen使用虚拟机内存,Metaspace使用本地内存。

【欢迎关注我的公众号】

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JVM参数调优是为了提高Java应用程序的性能和稳定性。下面是一些常见的JVM参数调优的思路和建议: 1. 堆内存设置: - -Xms: 初始堆大小,建议与-Xmx相同,避免堆大小的动态调整。 - -Xmx: 最大堆大小,根据应用程序的需求进行设置,避免频繁的垃圾回收。 2. 垃圾回收器选择: - -XX:+UseParallelGC: 使用并行垃圾回收器,适合多核CPU和高吞吐量应用。 - -XX:+UseConcMarkSweepGC: 使用CMS垃圾回收器,适合响应时间优先的应用。 - -XX:+UseG1GC: 使用G1垃圾回收器,适合大内存应用和低延迟要求。 3. 垃圾回收参数调优: - -XX:NewRatio: 设置新生代和老年代的比例,默认为2,可以根据应用程序的对象生命周期进行调整。 - -XX:SurvivorRatio: 设置Eden区和Survivor区的比例,默认为8,可以根据对象的存活率进行调整。 - -XX:MaxTenuringThreshold: 设置对象进入老年代的年龄阈值,默认为15,可以根据对象的存活率和内存情况进行调整。 4. 线程相关参数: - -Xss: 设置线程栈的大小,默认为1M,可以根据应用程序的线程数量进行调整。 - -XX:ParallelGCThreads: 并行垃圾回收的线程数量,默认为CPU核心数的1/8,可以根据CPU和内存情况进行调整。 5. 其他常用参数: - -XX:+UseCompressedOops: 使用压缩指针,可以减少对象引用的内存消耗。 - -XX:+DisableExplicitGC: 禁用显示调用System.gc()方法,避免不必要的垃圾回收。 以上是一些常见的JVM参数调优策略,具体的调优效果和最佳参数设置还需要根据应用程序的实际情况进行测试和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值