-Xss
: -Xss1m
, 每个线程的栈大小,jdk5之后,默认1m
。相同物理内存下,减小Xss
可生成更多线程, 操作系统对一个进程内的线程数是有限制的,不能无限生成,经验值在3000~5000左右。
-XX:ThreadStackSize=size
: 功能等同于-Xss
,默认=0,表示使用默认的stack size[Sparc: 512, Solaris Intel: 256, Sparc 64bit: 1024 all others 0]
一般只使用Xss即可。
-Xms
: -Xms4096m
, JVM
堆初始内存,默认是物理内存的1/64。空余堆内存大于**70%**时,JVM
会减少堆直到-Xms
的最小限制。
-Xmx
: -Xmx4096m
,JVM
堆最大内存,默认是物理内存的1/4。 空余堆内存小于**40%**时,JVM
就会增大堆直到-Xmx
的最大限制。
服务器一般设置-Xms
、-Xmx
相等以避免在每次GC
后调整堆的大小,JVM
重新分配内存。
-XX:MaxHeapSize
: 等同于-Xms
JVM
堆(Heap)= 年轻代(Young) + 老年代(Tenured)+ 方法区(永生代/持久代)
持久代一般固定大小为**
64m
**,增大年轻代后,将会减小年老代大小。此值对系统性能影响较大。
-Xmn
:-Xmn2g
,年轻代大小, = eden
+ 2 survivor space
, Sun官方推荐配置为整个堆的1/4-1/2
之间,比如3/8
。
可以用 -XX:NewSize
和 -XX:MaxNewSize
精确设置代替-Xmn
。所以 一般不设置此项。
-XX:NewSize
: 年轻代初始内存,等效于-Xmn
,需要小于Xms
。
-XX:MaxNewSize
: 年轻代最大内存,应该小于Xmx
。
-XX:NewRatio
:年轻代(Eden + 2 Survivor)与年老代的比值, 默认=2。
如:
-XX:NewRatio=2
: 则年轻代与年老代所占比值为1:2
,年轻代占整个堆栈的1/3
-XX:SurvivorRatio
:年轻代中Eden
区与Survivor
区的大小比值,默认=8。
如:
-XX:SurvivorRatio=8
:两个Survivor各=1,Eden=8,则单个Survivor占1/10,Eden占8/10。
-XX:MaxTenuringThreshold
:垃圾最大年龄。最大值=15,默认值:parallel (throughput) collector=15
, CMS=6
。
如:
-XX:MaxTenuringThreshold=0
:年轻代不经过Suvivor
区,直接进入老年代。 值越大,在年轻代存活时间越长。 如果将此值设置为一个较大值,则年轻代对象会在Survivor
区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概率。
-XX:PretenureSizeThreshold=size
: 大小超过size
值的对象,直接在老年区分配。默认=0,表示任何对象都需要在年轻代分配。只对串行回收器和ParNew
有效,对ParallelGC
无效。
类信息,常量,静态变量即时编译后的代码等。
-XX:PermSize=64m
:方法区初始内存 默认是物理内存的1/64
,已过时。JDK8
中用 -XX:MetaspaceSize
代替。
-XX:MaxPermSize=64m
默认是物理内存的1/4
。已过时,JDK8
中用-XX:MaxMetaspaceSize
代替。
-XX:MetaspaceSize=size
:为类的元数据分配的内存,默认20.8M
。 -XX:MaxMetaspaceSize=size
:为类的元数据分配的最大本地内存,默认无无穷大。
-XX:MaxDirectMemorySize
NIO
中的direct-buffer
使用的最大对外内存,默认=0,表示自动使用。如-XX:MaxDirectMemorySize=128M
-XX:+PrintGC
: GC
时打印信息,默认不启用。
-verbose:gc
: 等效于-XX:+PrintGC
。
-XX:+PrintGCDetails
GC
时打印详细信息,默认不启用。
-XX:+PrintGCTimeStamps
输出GC
的时间戳(以基准时间的形式)
-XX:+PrintGCDateStamps
输出GC
的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800
)
-XX:+PrintHeapAtGC
在进行GC
的前后打印出堆的信息
-Xloggc:/path/to/log/gc.log-date +%Y-%m-%d-%H-%M
日志文件的输出路径
-XX:+PrintTenuringDistribution
: 年代分布
-XX:+PrintGCApplicationStoppedTime
:打印程序暂停的时间,如GC
。
-XX:+PrintGCApplicationConcurrentTime
: 打印每次垃圾回收前,程序未中断的执行时间.
-XX:+PrintHeapAtGC
:打印堆详细信息。
-XX:+PrintCommandLineFlags
: 打印用户设置过的参数
-XX:+HeapDumpOnOutOfMemoryError
: 发生java.lang.OutOfMemoryError
异常时,dump heap
文件。默认dump
到当前目录。
-XX:HeapDumpPath=/opt/logs/xxx.heap.bin
: HeapDumpOnOutOfMemoryError
的文件目录。
-XX:+AlwaysPreTouch
: 预加载内存。启动时,JVM
先访问分配给它的内存,让操作系统把内存真正的分配给JVM
。但JVM
进程的启动时间会加长。
-XX:MinHeapDeltaBytes=size
: 每次扩展堆的时候最小增长。如-XX:MinHeapDeltaBytes=2097152
-XX:AutoBoxCacheMax=number
: 设置IntegerCache
的最大值,如: -XX:AutoBoxCacheMax=1000
,则调用Integer.valueOf
的时候,在1000
及以内的都会从缓存取。
仅64
位JVM
上有效。当Java heap
小于32G
时应启用,否则应关闭。
-XX:+UseCompressedOops
:oop
(ordinary object pointer
),普通对象指针压缩,用32bit
位移表示64bit
的普通对象指针。默认开启。
-XX:+UseCompressedClassPointers
:类压缩。用32bit
位移表示64bit
的类指针。默认开启。
-XX:CompressedClassSpaceSize=n
: 默认1G
。+UseCompressedClassPointers
后,Compressed Class Space
分配在MaxMetaspace
里,即MaxMetaspaceSize=Compressed Class Space Size + Metaspace area (excluding the Compressed Class Space) Size
。
-XX:+UseConcMarkSweepGC
: 使用CMS
收集器。
JVM
参数中,“FullCollection
”标识 FULL GC
, "FullGC
"表示一次完整的gc。
-XX:+UseCMSCompactAtFullCollection
: 在FULL GC
的时候, 对年老代的压缩。
-XX:+CMSFullGCsBeforeCompaction=n
: +UseCMSCompactAtFullCollection
下有效,表示第n次标记-清除后,做一次压缩。默认0,即每次标记-清除后都做一次压缩。
-XX:UseCMSInitiatingOccupancyOnly
: 始终基于设定的阈值,不根据运行情况进行调整。
-XX:CMSInitiatingOccupancyFraction=percent
: 老年代开始GC
的内存占用比例(+UseCMSInitiatingOccupancyOnly
下有效)。 默认92。 如:-XX:CMSInitiatingOccupancyFraction=75
,则老年代内存空间使用了75%
时开始回收。
-XX:+DisableExplicitGC
: System.gc()
。
https://juejin.cn/post/6844903990082142215