最近在学习JVM,把JVM常用的配置参数以及常用命令列出来做个笔记。虽然这些在Oracle官网都有,但是懒得翻
1. -Xss size 设置线程栈的大小(默认单位:byte),可在size后面加k/K代表kb,加m/M代表mb,加g/G代表gb
默认情况下,在linux,mac系统中默认为1024KB
例如(1) -Xss 1024 设置线程栈大小为1024byte (2) -Xss 1m 设置栈大小为1m
2.linux中可以用jstack 进程id 来查看java进程中的所有线程
3. -Xmx(size) 或 -XX:MaxHeapSize=size 设置堆内存空间的最大值,size语法同上
-Xms设置堆空间初始值,一般和-Xmx设置的一样
-Xmn 或 -XX:NewSize=size + -XX:MaxNewSize=size 设置新生代的大小
例如(1)设置堆空间为8m -Xms8m
4. jps命令 可查看jvm中有哪些进程,可以配合之后的jmap查看内存的信息
5. jmap -heap 进程id 查看进程号为id的进程中的堆信息
6. -XX:MaxMetaspaceSize=size ,size语法同上,设置jvm的元空间最大值,针对的是java1.8
7. -XX:MaxPermSize=size,设置jvm永久代的最大值,针对java1.6 。永久代其实就是之后的元空间,不过发生了一些变化
8. javap -v xxxxxx.class java的反编译工具,可以用其查看类的信息,包括访问修饰符,父类,接口,常量池等
9. -XX:+PrintStringTableStatistics 打印串池的信息
10. -XX:+PrintGCDetails -verbose:gc 显示垃圾回收时的信息
11. -XX:StringTableSize=桶(bucket)个数,我理解的是设置串池的最大容量
12. -XX:SurvivorRatio=ratio 固定幸存区占Eden区的1/ratio,默认为8m
以下两条使得幸存区大小得以动态调整: -XX:InitialSurvivorRatio=ratio 和 -XX:+UseAdaptiveSizePolicy 动态调整比例
13. -XX:MaxTenuringThreshold=threshold threshold代表放入老年代的阈值
-XX:+PrintTenuringDistribution 输出晋升(到老年代)详情
14. -XX:+ScavengeBeforeFullGC 指示在FullGc前做一次MinoGC
15.设置GC的类型
(1)-XX:+UseSerialGC 设置串行收集器
或者 -XX:+UseSerialGC=Serial +SerialOld
(2) -XX:+UseParallelGC(用于新生代) -XX:+UseParallelOldGC(用于老年代) 设置并行收集器(默认,吞吐量优先),开启一个,另一个也会开启
-XX:+UseAdaptiveSizePolicy 自适应调整新生代的比例
-XX:GCTimeRatio=ratio 设置吞吐量目标,调整垃圾回收时间与总时间的占比 公式:1/1+ratio
-XX:MaxGCPauseMillis=ms 设置stw(stop the world)的最大时间,默认200ms ,与GCTimeRatio的目的冲突
-XX:ParallelGCThreads=n 设置GC回收使用的线程数,一般和cpu的线程数一样
(3)-XX:+UseConcMarkSweepGC(用于老年代) 设置并发收集器(响应时间优先)
-XX:ConcGCThreads=threads 和 -XX:ParallelGCThreads=n共同使用 ,ConcGC建议设为ParallelGC的1/4,让其他的用于用户线程工作
-XX:CMSInitiatingOccupancyFraction=percent percent是CMS回收中执行垃圾回收时的内存占比,只有到了这个内存占比才会进行垃圾回收,而不是内存不足了才进行回收
-XX:+CMSScavengeBeforRemark 在重新标记前对新生代做一次垃圾回收,防止新生代对象引用了老年代对象,在重新标记时做一些无用的查询工作。(因为若新生代对象引用老年代对象,重新标记时扫描整个堆,新生代对象对老年代做了可达性分析,所以在重新标记前清理新生代可以减轻做可达性分析时扫描堆的工做压力)
16.设置其他类型GC
(1)G1(Garage First)jdk9默认使用。适用于注重吞吐量和低延时的超大堆内存,会划分region,整体上用标记整理法,每个区之间是复制法
-XX:+UseG1GC 表示使用G1GC
-XX:G1HeapRegionSize= size size设置它将堆划分为多少个大小相等的区域
-XX:MaxGCPauseMillis=time 最大stw时间,默认200ms