记录JVM的学习

JVM虚拟机常用参数:

在虚拟机中输入java就可以启动一个java虚拟机,以横杠开头的都是标准参数;以-X开头的都是非标准参数,当在系统中输入 java -X的时候,系统会把所有的非标准参数都列举出来;一般真正用来调优的参数是以-XX开头的

标准参数:

记录JVM的学习_第1张图片

非标准参数:

记录JVM的学习_第2张图片

真正调优的时候用到的参数

GC常用参数

  • -Xmn -Xms -Xmx -Xss

    年轻代 最小堆 最大堆 栈空间

  • -XX:+UseTLAB

    使用TLAB, 默认打开

  • -XX:+PrintTLAB

    打印TLAB的使用情况

  • -XX:+TLABSize

    设置TLAB大小

  • -XX:+DisableExplictGC

    System.gc()不管用,FGC

  • -XX:+PrintGC

  • -XX:+PrintGCDetails

  • -XX:+PrintHeapAtGC

  • -XX:+PrintGCTimeStamps

  • -XX:+PrintGCApplicationConcurrentTime

    打印应用程序时间

  • -XX:+PrintGCApplicationStoppedTime

    打印暂停时长

  • -XX:+PrintReferenceGC

    记录回收了多少种不同引用类型的引用

  • -XX:+PrintGCApplicationStoppedTime

    打印暂停时长

  • -XX:+PrintReferenceGC

    记录回收了多少种不同引用类型的引用

  • -verbose:class

    类加载详细过程

  • -XX:+PrintVMOptions

  • -XX:+PrintFlagsFinal -XX:+PrintFlagsInitial

    特别常用的参数(必须会用)

  • -XX:+PrintFlagsFinal -XX:+PrintFlagsInitial

    特别常用的参数(必须会用)

  • -Xloggc:opt/log/gc.log

  • -XX:MaxTenuringThreshold

    升代年龄,最大值15

  • 锁自旋次数 -XX:PreBlockSpin 热点代码检测参数 -XX:CompileThreshold 逃逸分析 标量替换

  • -XX:+HeapDumpOnOutOfMemoryError

    什么时候出现OOM了,JVM就什么时候自动转出堆信息文件jmap生成的那个

Parallel常用参数

  • -XX:SurvivorRatio
  • -XX:PreTenureSizeThreshold
    大对象到底多大
  • -XX:MaxTenuringThreshold
  • -XX:+ParallelGCThreads
    并行收集器的线程数,同样适用于CMS,一般设为和CPU核数相同
  • -XX:+UseAdaptiveSizePolicy
    自动选择各区大小比例

CMS常用参数

  • -XX:+UseConcMarkSweepGC
  • -XX:ParallelCMSThreads
    CMS线程数量
  • -XX:CMSInitiatingOccupancyFraction
    使用多少比例的老年代后开始CMS收集,默认是68%(近似值),如果频繁发生SerialOld卡顿,应该调小,(频繁CMS回收)
  • -XX:+UseCMSCompactAtFullCollection
    在FGC时进行压缩
  • -XX:CMSFullGCsBeforeCompaction
    多少次FGC之后进行压缩
  • -XX:+CMSClassUnloadingEnabled
  • -XX:CMSInitiatingPermOccupancyFraction
    达到什么比例时进行Perm回收
  • GCTimeRatio
    设置GC时间占用程序运行时间的百分比
  • -XX:MaxGCPauseMillis
    停顿时间,是一个建议时间,GC会尝试用各种手段达到这个时间,比如减小年轻代

G1常用参数

  • -XX:+UseG1GC
  • -XX:MaxGCPauseMillis
    建议值,G1会尝试调整Young区的块数来达到这个值
  • -XX:GCPauseIntervalMillis
    ?GC的间隔时间
  • -XX:+G1HeapRegionSize
    分区大小,建议逐渐增大该值,1 2 4 8 16 32。
    随着size增加,垃圾的存活时间更长,GC间隔更长,但每次GC的时间也会更长
    ZGC做了改进(动态区块大小)
  • G1NewSizePercent
    新生代最小比例,默认为5%
  • G1MaxNewSizePercent
    新生代最大比例,默认为60%
  • GCTimeRatio
    GC时间建议比例,G1会根据这个值调整堆空间
  • ConcGCThreads
    线程数量
  • InitiatingHeapOccupancyPercent
    启动G1的堆空间占用比例

常用的一些命令:

jps 列出java的所有进程

jinfo [进程号] 显示出java进程的详细信息

记录JVM的学习_第3张图片

jstat -gc [进程号] java程序的统计信息

jstack [进程号] 将java程序的线程详细信息打印出来

记录JVM的学习_第4张图片

top 查看进程占用的cpu资源

top -Hp [进程号] 查看某个进程中的线程所占用的cpu资源

jmap -histo 11988

第一个作用:会对当前正在运行的java程序里面对象的数量,占了多少字节

第二个作用:产生一个堆内存的文件,以供分析
jmap -dump:format=b,file=20230219.txt  11988

记录JVM的学习_第5张图片

GC垃圾回收机制的参数:

S0C:第一个Survivor区的空间

S1C:第二个Survivor区的空间

S0U:第一个Survivor区的使用空间

S1U:第二个Survivor区的使用空间

EC:Eden区的总空间

EU:Eden区的使用空间

OC:Old区的总空间

OU:Old区的已使用空间

MC:元空间的总空间

CCSC:压缩类的总空间

CCSU:压缩类的使用空间

YGC:年轻代垃圾回收次数

TGCT:年轻垃圾回收消耗时间

FGC:老年代垃圾回收次数

FGCT:老年代垃圾回收消耗时间

GCT:垃圾回收消耗总时间

堆内存的统计

NGCMN:新生代最小空间

NGCMX:新生代最大空间

NGC:当前新生代空间

S0C:第一个Survivor区空间

S1C:第二个Survivor区空间

EC:Eden区的总空间

OGCMN:老年代最小空间

OGCMX:老年代最大空间

OGC:当前老年代空间

OC:当前老年代空间

MCMN:最小元空间大小

MCMX:最大元空间大小



你可能感兴趣的:(jvm,学习)