JVM参数配置

孤街醉人 提交于 2019-11-29 16:28:32

堆参数设置

-XX:+PrintGC
    使用这个参数,虚拟机启动后,只要遇到GC就会打印日志

-XX:+PrintGCDetails
    可以查看详细信息,包括各个区的情况

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


-XX:+UseSerialGC
    配置串行回收器


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

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

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

-XX:MaxGCPauseMillis=100
    设置每次年轻代并行收集最大暂停时间,如果无法满足此时间,JVM 会自动调整年轻代大小,以满足此值。

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


-XX:+UseConcMarkSweepGC
    设置年老代为并发收集。

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

-XX:+UseCMSCompactAtFullCollection
    打开对年老代的压缩。可能会影响性能,但是可以消除碎片


-Xms3550m
    设置Java程序启动时初始化堆大小

-Xmx3550m
    设置Java程序能获得最大的堆大小

在实际工作中,我们可以直接将初始的堆大小与最大堆大小设置相等,这样的好处是可以减少程序运行时的垃圾回收次数,从而提高性能。


-XX:+PrintCommandLineFlags
    可以将隐式或者显示传给虚拟机的参数输出

新生代参数配置

-XX:NewSize=5m
    设置新生代最小空间大小

-XX:MaxNewSize=10m
    设置新生代最大空间大小

-Xmn2g
    可以设置新生代的大小,设置一个比较大的新生代会减少老年代的大小,这个参数对系统性能以及GC行为有很大的影响,
    新生代大小一般会设置整个堆空间的1/3。


-XX:SurvivorRatio=4
    用来设置新生代中eden空间和from/to空间的比例。含义:-XX:SurvivorRatio=eden/from=eden/to。
    基本策略:尽可能将对象预留在新生代,减少老年代的GC次数。

-XX:NewRatio=4
    设置新生代和老年代的比例:-XX:NewRatio=老年代/新生代。

堆溢出参数配置

-XX:+HeapDumpOnOutOfMemoryError
    使用该参数可以在内存溢出时导出整个堆信息

-XX:HeapDumpPath=D:/OOM.dump
    可以设置导出堆的存放路径。

堆典型设置

java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0

栈参数配置

-Xss1m(默认)
    来指定线程的最大栈空间

方法区(永久区)参数配置

-XX:PermSize=64M
    设置永久代最小空间大小。

-XX:MaxPermSize=64M(默认)
    如果系统运行时生产大量的类,就需要设置一个相对合适的方法区,以免出现永久区内存溢出的问题。

直接内存参数配置

-XX:MaxDirectMemorySize=1m
    如果不设置,默认值为最大堆空间,即-Xmx
    直接内存使用达到上限时,就会触发垃圾回收,如果不能有效的释放空间,就会引起系统的OOM。

对象进入老年代的参数配置

-XX:MaxTenuringThreshold=15
    新生代每次GC之后如果对象没有被回收,则年龄加1,默认情况下为15

TLAB参数配置

Thread Local Allocation Buffer即线程本地分配缓存:
    一个线程专用的内存分配区域,是为了加速对象分配对象而生的。

每一个线程都会产生一个TLAB,该线程独享的工作区域,Java虚拟机使用这种TLAB区来避免多线程冲突问题,提高了对象分配的效率。


-XX:+UseTLAB
    使用TLAB

-XX:TLABSize=1024
    设置TLAB大小

-XX:TLABRefillWasteFraction=64
    设置维护进入TLAB空间的单个对象大小,它是一个比例值,默认为64,即如果对象大于整个空间的1/64,则在堆创建对象。

-XX:+ResizeTLAB
    自调整TLABRefillWasteFraction阈值。

-XX:+PrintTLAB
    查看TLAB信息

参考

https://blog.csdn.net/weixin_37195606/article/details/82805216

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!