JVM常用参数
Posted TooLateToLearn!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM常用参数相关的知识,希望对你有一定的参考价值。
-Xmx: Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定。
-Xms: Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值。将堆的最小值参数与最大值参数设置为一样即可避免堆自动拓展。
-Xmn:年轻代的大小。它的大小将直接影响老年代的大小,Sun官方推荐为整个堆大小的3/8。
-XX:+HeapDumpOnOutOfMemoryError:让虚拟机在出现内存溢出异常时Dump出当前的内存堆转储快照以便时候进行分析。
-XX:PermSize与-XX:MaxPermSize:调节永久代内存区的上限(Java8或已放弃为方法区永久代单独划分内存区域)。
-XX:+/-UseTLAB:
有两种堆对象内存分配的方式:“指针碰撞”(Bump the Pointer),另一种是“空闲列表”(Free List)。虽然书上说指针碰撞方法在多线程上会面临不得不同步的问题(CAS),但空闲列表在某种程度上也避免不了同步问题吧。除CAS之外另一种解决同步问题的方式是把内存分配的动作按照线程划分在不同的空间之中进行,即每个线程在Java堆中预先分配一小块内存,称为本地线程分配缓冲(Thread Local Allocation Buffer,TLAB)。哪个线程要分配内存,就在哪个线程的TLAB上分配,只有TLAB用完并分配新的TLAB时,才需要同步锁定。虚拟机是否使用TLAB,可以通过-XX:+/-UseTLAB。
-Xss:每个线程的栈容量大小。
-XX:MaxDirectMemorySize:DirectMemory(直接内存)容量可通过这个参数指定,如果不指定则默认与Java堆最大值(-Xmx)一样。
回收方法区:
HopSpot虚拟机提供了-Xnoclassgc参数进行控制是否对无用类进行回收,还可以使用
-verbose:class以及-XX:+TraceClassUnLoading查看类加载和卸载信息,其中-verbose:class和-XX:+TraceClassLoading可以在Product版的虚拟机中使用,
-XX:+TraceClassUnLoading参数需要FastDebug版的虚拟机支持。
-XX:+UseSerialGC:使用Serial + Serial Old收集器组合。
-XX:+UseParallelGC:使用Parallel Scavenge + Serial Old (PS MarkSweep)收集器组合。
-XX:+UseConcMarkSweepGC:使用CMS垃圾收集器。ParNew是使用CMS默认的新生代收集器。
-XX:+UserParNewGC:使用ParNew垃圾收集器。
-XX:+UseParallelOldGC:使用Parallel Scavenge + Parallel Old收集器组合。
-XX:SurvivorRatio:新生代中Eden区与Survivor区的容量比值。默认为8,代表Eden : Survivor = 8 : 1。
-XX:HandlePromotionFailure
-XX:ParallelGCThreads:设置ParNew收集器垃圾收集的线程数。
-XX:PretenureSizeThreshold:对象超过多大直接分配到老年代。
-XX:MaxTenuingThreshold:晋升到老年代的对象年龄。每个对象坚持过一个Minor GC之后,年龄就增加1,当超过这个参数值就进入老年代。
-XX:HandlePromotionFailure:是否允许分配担保失败,即老年代的剩余空间不足以应付新生代的整个Eden和Survivor区的所有对象都存活的极端情况。
针对Parallel Scavenge收集器
-XX:MaxGCPauseMillis:允许设置一个大于0的毫秒数,收集器将尽可能的保证内存回收花费的时间不超过设定值。
-XX:+UseAdaptiveSizePolicy:这是一个开关参数,当这个参数打开后就不需要手工指定新生代的大小、Eden与Survivor的比例、晋升老年代对象大小等参数细节,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或者最大吞吐量。
-XX:GCTimeRatio:垃圾收集时间占总时间的比率,一个大0小于100的整数。计算方法:如果设置为19则,允许的最大GC时间就占总时间的5%(1 / (1 + 19))。
CMS收集器
-XX:CMSInitiatingOccupancyFraction:当老年代的内存空间被使用超过一定百分比之后就进行一次Full GC以避免因“浮动垃圾”造成的“Concurrent Mode Failure”。
-XX:+UseCMSCompactAtFullCollection:默认开启,解决内存空间碎片化导致无法分配连续大空间的问题。在进行Full GC时进行一次内存碎片的合并过程。
-XX:CMSFullGCsBeforeCompaction:用于设置执行多少次不压缩的Full GC后,进行一次内存碎片合并操作(默认为0,表示每次进入Full GC都进行碎片整理)。
以上是关于JVM常用参数的主要内容,如果未能解决你的问题,请参考以下文章
JVM面试问题系列:JVM 配置常用参数和常用 GC 调优策略