jvm调优其实就是对Young代的次数与时间调优

合集下载

JVM调优总结

JVM调优总结

JVM性能调优Posted on 2010-06-26 06:48 chen77716阅读(1208) 评论(3) 编辑收藏最近因项目存在内存泄漏,故进行大规模的JVM性能调优,现把经验做一记录。

一、JVM内存模型及垃圾收集算法1.根据Java虚拟机规范,JVM将内存划分为:∙New(年轻代)∙Tenured(年老代)∙永久代(Perm)其中New和Tenured属于堆内存,堆内存会从JVM启动参数(-Xmx:3G)指定的内存中分配,Perm 不属于堆内存,有虚拟机直接分配,但可以通过-XX:PermSize -XX:MaxPermSize等参数调整其大小。

∙年轻代(New):年轻代用来存放JVM刚分配的Java对象∙年老代(Tenured):年轻代中经过垃圾回收没有回收掉的对象将被Copy到年老代∙永久代(Perm):永久代存放Class、Method元信息,其大小跟项目的规模、类、方法的量有关,一般设臵为128M就足够,设臵原则是预留30%的空间。

New又分为几个部分:∙Eden:Eden用来存放JVM刚分配的对象∙Survivor1∙Survivro2:两个Survivor空间一样大,当Eden中的对象经过垃圾回收没有被回收掉时,会在两个Survivor之间来回Copy,当满足某个条件,比如Copy次数,就会被Copy到Tenured。

显然,Survivor只是增加了对象在年轻代中的逗留时间,增加了被垃圾回收的可能性。

2.垃圾回收算法垃圾回收算法可以分为三类,都基于标记-清除(复制)算法:∙Serial算法(单线程)∙并行算法∙并发算法JVM会根据机器的硬件配臵对每个内存代选择适合的回收算法,比如,如果机器多于1个核,会对年轻代选择并行算法,关于选择细节请参考JVM调优文档。

稍微解释下的是,并行算法是用多线程进行垃圾回收,回收期间会暂停程序的执行,而并发算法,也是多线程回收,但期间不停止应用执行。

JVM调优总结-Xms-Xmx-Xmn-Xss

JVM调优总结-Xms-Xmx-Xmn-Xss

JVM调优总结-Xms-Xmx-Xmn-Xssjava启动参数共分为三类;其⼀是标准参数(-),所有的JVM实现都必须实现这些参数的功能,⽽且向后兼容;其⼆是⾮标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满⾜,且不保证向后兼容;其三是⾮Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使⽤;标准参数中⽐较有⽤的:verbose-verbose:class输出jvm载⼊类的相关信息,当jvm报告说找不到类或者类冲突时可此进⾏诊断。

-verbose:gc输出每次GC的相关情况。

-verbose:jni输出native⽅法调⽤的相关情况,⼀般⽤于诊断jni调⽤错误信息。

⾮标准参数⼜称为扩展参数⼀般⽤到最多的是-Xms512m 设置JVM促使内存为512m。

此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

-Xmx512m ,设置JVM最⼤可⽤内存为512M。

-Xmn200m:设置年轻代⼤⼩为200M。

整个堆⼤⼩=年轻代⼤⼩ + 年⽼代⼤⼩ + 持久代⼤⼩。

持久代⼀般固定⼤⼩为64m,所以增⼤年轻代后,将会减⼩年⽼代⼤⼩。

此值对系统性能影响较⼤,Sun官⽅推荐配置为整个堆的3/8。

-Xss128k:设置每个线程的堆栈⼤⼩。

JDK5.0以后每个线程堆栈⼤⼩为1M,以前每个线程堆栈⼤⼩为256K。

更具应⽤的线程所需内存⼤⼩进⾏调整。

在相同物理内存下,减⼩这个值能⽣成更多的线程。

但是操作系统对⼀个进程内的线程数还是有限制的,不能⽆限⽣成,经验值在3000~5000左右。

-Xloggc:file与-verbose:gc功能类似,只是将每次GC事件的相关情况记录到⼀个⽂件中,⽂件的位置最好在本地,以避免⽹络的潜在问题。

若与verbose命令同时出现在命令⾏中,则以-Xloggc为准。

-Xprof跟踪正运⾏的程序,并将跟踪数据在标准输出输出;适合于开发环境调试。

Java虚拟机JVM各调优参数说明

Java虚拟机JVM各调优参数说明

Java虚拟机JVM各调优参数说明Java虚拟机(JVM)是Java程序运行的环境,它负责将Java源代码编译为字节码,并在运行时执行这些字节码。

JVM的性能对于Java应用程序的性能至关重要。

为了优化JVM的性能,我们可以通过调整一些参数来改变其行为。

下面是JVM各调优参数的详细说明。

1. -Xms和-Xmx:这两个参数用于设置JVM的初始堆大小和最大堆大小。

初始堆大小表示JVM在启动时申请的内存大小,最大堆大小表示JVM所能申请的最大内存大小。

可以使用以下命令设置初始堆大小为1GB,最大堆大小为2GB:-Xms1g -Xmx2g。

2. -XX:NewSize和-XX:MaxNewSize:这两个参数用于设置新生代的初始大小和最大大小。

新生代是JVM堆的一部分,用于存放新创建的对象。

可以使用以下命令设置新生代的初始大小为256MB,最大大小为512MB:-XX:NewSize=256m -XX:MaxNewSize=512m。

3. -XX:SurvivorRatio:这个参数用于设置新生代中Eden区和Survivor区的比例。

Eden区是新对象的分配区域,Survivor区是用于存放幸存的对象的区域。

可以使用以下命令设置Eden区和Survivor区的比例为8:1:-XX:SurvivorRatio=84. -XX:MaxTenuringThreshold:这个参数用于设置对象在Survivor区中的最大年龄。

当对象在Survivor区中存活的时间超过这个阈值时,它将被晋升到老年代。

可以使用以下命令设置最大年龄为15:-XX:MaxTenuringThreshold=155. -XX:PermSize和-XX:MaxPermSize:这两个参数用于设置永久代的初始大小和最大大小。

永久代用于存放类的元数据、静态变量和常量池等信息。

可以使用以下命令设置永久代的初始大小为128MB,最大大小为256MB:-XX:PermSize=128m -XX:MaxPermSize=256m。

jvm常用调优参数

jvm常用调优参数

jvm常用调优参数
JVM是JavaVirtualMachine的缩写,是Java程序运行的核心。

JVM的调优是优化Java应用程序性能的重要一环,其中调优参数的合理设置是关键。

以下是常用的JVM调优参数:
1. -Xms:设置JVM的初始内存大小,默认为物理内存的
1/64。

2. -Xmx:设置JVM的最大内存大小,超出该内存大小后会触发垃圾回收。

3. -Xmn:设置年轻代的大小,一般设置为总内存的1/3或
1/4。

4. -XX:SurvivorRatio:设置年轻代中Eden区和Survivor区的比例,默认值为8。

5. -XX:NewRatio:设置新生代和老年代的比例,默认值为2。

6. -XX:MaxPermSize:设置永久代的大小,一般设置为
256MB。

7. -XX:+UseConcMarkSweepGC:使用CMS垃圾回收器,可以减少内存抖动。

8. -XX:+UseParallelGC:使用并行垃圾回收器,可提高垃圾回收效率。

9. -XX:+HeapDumpOnOutOfMemoryError:当JVM内存溢出时,生成堆转储文件。

10. -XX:+PrintGCDetails:打印垃圾回收的详细信息。

以上是常用的JVM调优参数,通过合理地设置参数,可以优化Java应用程序的性能。

jvm原理及性能调优

jvm原理及性能调优

jvm原理及性能调优JVM原理及性能调优。

JVM(Java Virtual Machine)是Java虚拟机的缩写,是Java程序运行的核心组件。

它负责将Java字节码文件解释成特定平台上的机器指令。

JVM的性能对于Java应用程序的运行效率和稳定性有着至关重要的影响。

因此,了解JVM的原理并进行性能调优是非常重要的。

首先,我们来了解一下JVM的基本原理。

JVM主要由类加载器、运行时数据区、执行引擎三部分组成。

类加载器负责将class文件加载到JVM中,并对类进行初始化、连接和加载。

运行时数据区包括方法区、堆、虚拟机栈、本地方法栈和程序计数器,它们分别用于存储类的结构信息、对象实例、方法调用、本地方法和线程执行的位置。

执行引擎负责执行字节码指令,将Java程序转换成机器代码。

了解了JVM的基本原理之后,我们需要关注JVM性能调优的相关内容。

JVM 性能调优主要包括内存管理、垃圾回收、JIT编译器优化和线程管理等方面。

在内存管理方面,我们可以通过调整堆内存大小、永久代大小、新生代和老年代的比例等参数来优化内存的使用。

合理的内存分配可以减少内存碎片,提高内存使用效率。

垃圾回收是JVM性能调优的重要一环。

通过调整垃圾回收器的类型、参数和触发条件,我们可以优化垃圾回收的效率,减少应用程序的停顿时间,提高系统的吞吐量。

JIT编译器是JVM的即时编译器,它负责将热点代码编译成本地机器代码,以提高程序的执行速度。

我们可以通过调整JIT编译器的参数来优化编译效率,提高程序的性能。

线程管理也是JVM性能调优的重要内容。

合理的线程调度和线程池的使用可以提高系统的并发性能,减少线程的竞争和阻塞,提高系统的吞吐量。

除了上述内容,我们还可以通过监控工具对JVM进行性能分析,找出程序的瓶颈,并针对性地进行优化。

常用的监控工具包括JVisualVM、JConsole、JProfiler 等。

总的来说,JVM的性能调优是一个复杂而又细致的工作。

Java虚拟机(JVM)面试题-51道

Java虚拟机(JVM)面试题-51道

4. 说一下 JVM由那些部分组成,运行流程是什么?JVM包含两个子系统和两个组件: 两个子系统为Class loader(类装载)、Execution engine(执行引擎);两个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。

Class loader(类装载):根据给定的全限定名类名(如:ng.Object)来装载class文件到Runtime data area中的method area。

Execution engine(执行引擎):执行classes中的指令。

Native Interface(本地接口):与native libraries交互,是其它编程语言交互的接口。

Runtime data area(运行时数据区域):这就是我们常说的JVM的内存。

程序计数器(Program Counter Register):当前线程所执行的字节码的行号指示器,字节码解线程A在看直播突然,线程B来了一个视频电话,就会抢夺线程A的时间片,就会打断了线程A,线程A 就会挂起解析栈帧:1. 局部变量表:是用来存储我们临时8个基本数据类型、对象引用地址、returnAddress类型。

(returnAddress中保存的是return后要执行的字节码的指令地址。

)2. 操作数栈:操作数栈就是用来操作的,例如代码中有个 i = 6*6,他在一开始的时候就会进行操作,读取我们的代码,进行计算后再放入局部变量表中去3. 动态链接:假如我方法中,有个 service.add()方法,要链接到别的方法中去,这就是动态链接,存储链接的地方。

4. 出口:出口是什呢,出口正常的话就是return 不正常的话就是抛出异常落一个方法调用另一个方法,会创建很多栈帧吗?答:会创建。

如果一个栈中有动态链接调用别的方法,就会去创建新的栈帧,栈中是由顺序的,一个栈帧调用另一个栈帧,另一个栈帧就会排在调用者下面栈指向堆是什么意思?栈指向堆是什么意思,就是栈中要使用成员变量怎么办,栈中不会存储成员变量,只会存储一个应用地址递归的调用自己会创建很多栈帧吗?答:递归的话也会创建多个栈帧,就是在栈中一直从上往下排下去8. 你能给我详细的介绍Java堆吗?(重点理解)java堆(Java Heap)是java虚拟机所管理的内存中最大的一块,是被所有线程共享的一块内存区域,在虚拟机启动时创建。

JVM调优参数、方法、工具以及案例总结

JVM调优参数、方法、工具以及案例总结

JVM 调优参数、⽅法、⼯具以及案例总结这种⽂章挺难写的,⼀是JVM参数巨多,⼆是内容枯燥乏味,但是想理解JVM调优⼜是没法避开的环节,本⽂主要⽤来总结梳理便于以后翻阅,主要围绕四个⼤的⽅⾯展开,分别是JVM调优参数、JVM调优⽅法(流程)、JVM调优⼯具、JVM 调优案例,调优案例⽬前正在分析,会在将来补上。

垃圾回收有关参数参数部分,这⼉只是做⼀个总结,更详细更新的内容请参考Oracle官⽹:处理器组合参数关于JVM垃圾处理器区别,参考:-XX:+UseSerialGC = Serial New (DefNew) + Serial Old适⽤于⼩型程序。

默认情况下不会是这种选项,HotSpot 会根据计算及配置和JDK 版本⾃动选择收集器-XX:+UseParNewGC = ParNew + SerialOld这个组合已经很少⽤(在某些版本中已经废弃),详情参考:-XX:+UseConc(urrent)MarkSweepGC = ParNew + CMS + Serial Old-XX:+UseParallelGC = Parallel Scavenge + Parallel Old (1.8默认) 【PS + SerialOld】-XX:+UseParallelOldGC = Parallel Scavenge + Parallel Old -XX:+UseG1GC = G1Linux中没找到默认GC的查看⽅法,⽽windows中会打印UseParallelGCjava +XX:+PrintCommandLineFlags -version 通过GC 的⽇志来分辨Linux下1.8版本默认的垃圾回收器到底是什么?1.8.0_181 默认(看不出来)Copy MarkCompact 1.8.0_222 默认 PS + PO虚拟机参数并⾏收集器相关参数参数名称含义默认值解释说明-Xms 初始堆⼤⼩物理内存的1/64(<1GB)默认(MinHeapFreeRatio 参数可以调整)空余堆内存⼩于40%时,JVM 就会增⼤堆直到-Xmx 的最⼤限制.-Xmx 最⼤堆⼤⼩物理内存的1/4(<1GB)默认(MaxHeapFreeRatio 参数可以调整)空余堆内存⼤于70%时,JVM 会减少堆直到 -Xms 的最⼩限制-Xmn 年轻代⼤⼩(1.4or lator)注意:此处的⼤⼩是(eden+ 2 survivor space).与jmap -heap 中显⽰的New gen 是不同的。

JVM调优参数详解

JVM调优参数详解

JVM调优参数详解GC有两种类型:Scavenge GC 和Full GC1、Scavenge GC⼀般情况下,当新对象⽣成,并且在Eden申请空间失败时,就会触发Scavenge GC,堆的Eden区域进⾏GC,清除⾮存活对象,并且把尚且存活的对象移动到Survivor的两个区中。

2、Full GC对整个堆进⾏整理,包括Young、Tenured和Perm。

Full GC ⽐Scavenge GC要慢,因此应该尽可能减少Full GC,有如下原因可能导致Full GCa、Tenured被写满;b、Perm域被写满c、System.gc()被显⽰调⽤d、上⼀次GC之后Heap的各域分配策略动态变化;-Xmx512m -Xms512m -Xmn192m -Xss128kJVM中最⼤堆⼤⼩受三⽅⾯限制,相关操作系统的数据模型(32位还是64位)限制;系统的可⽤虚拟内存限制;系统的可⽤物理内存限制-Xmx512m:设置JVM实例堆最⼤可⽤内存为512M。

-Xms512m:设置JVM促使内存为512m。

此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

-Xmn192m设置年轻代⼤⼩为192m。

整个JVM内存⼤⼩=年轻代⼤⼩ + 年⽼代⼤⼩ + 持久代⼤⼩。

持久代⼀般固定⼤⼩为64m,所以增⼤年轻代后,将会减⼩年⽼代⼤⼩。

此值对系统性能影响较⼤,Sun官⽅推荐配置为整个堆的3/8。

-Xss128k设置每个线程的堆栈⼤⼩。

JDK5.0以后每个线程堆栈⼤⼩为1M,以前每个线程堆栈⼤⼩为256K。

更具应⽤的线程所需内存⼤⼩进⾏调整。

在相同物理内存下,减⼩这个值能⽣成更多的线程。

但是操作系统对⼀个进程内的线程数还是有限制的,不能⽆限⽣成,经验值在3000~5000左右。

注意下⾯问题:(1)增加Heap的⼤⼩虽然会降低GC的频率,但也增加了每次GC的时间。

并且GC运⾏时,所有的⽤户线程将暂停,也就是GC期间,Java应⽤程序不做任何⼯作。

jvm 调优 参数

jvm 调优 参数

jvm 调优参数JVM调优参数JVM(Java Virtual Machine)调优是指通过调整JVM的参数,以提高Java应用程序的性能和稳定性。

JVM参数的设置对应用程序的运行效果和资源利用情况具有重要影响。

在本文中,将介绍一些常用的JVM调优参数,并解释它们的作用。

1. 堆内存参数- -Xms: 初始堆内存大小。

该参数指定JVM启动时堆内存的初始大小。

- -Xmx: 最大堆内存大小。

该参数指定JVM运行时堆内存能达到的最大限制。

- -Xmn: 年轻代内存大小。

该参数指定了年轻代的大小。

- -XX:NewRatio: 年轻代和老年代的比例。

该参数用来设置年轻代与老年代的比例,默认为2,即年轻代占整个堆内存的1/3。

2. 垃圾回收参数- -XX:+UseSerialGC: 使用串行垃圾回收器。

该参数在单核处理器系统上比较适用,回收时会暂停应用程序的执行。

- -XX:+UseParallelGC: 使用并行垃圾回收器。

该参数在具有多个处理器的系统上比较适用,可以并行地进行垃圾回收。

- -XX:+UseConcMarkSweepGC: 使用并发标记-清除垃圾回收器。

该参数在较大堆内存的情况下比较适用,可以并发地进行垃圾回收,减少暂停时间。

- -XX:SurvivorRatio: 幸存区比例。

该参数用来设置eden区与survivor区的比例,默认为8,即eden区占整个年轻代的8/10。

- -XX:MaxTenuringThreshold: 最大晋升年龄。

该参数用来设置对象从eden区到survivor区晋升的最大年龄。

3. 线程参数- -XX:ParallelGCThreads: 垃圾回收的线程数。

- -XX:ConcGCThreads: 并发垃圾回收的线程数。

- -XX:ThreadStackSize: 线程栈的大小。

4. 类加载参数- -XX:MetaspaceSize: 元空间大小。

该参数指定元空间的初始大小。

JVM调优常用的调优参数

JVM调优常用的调优参数

JVM调优常用的调优参数JVM(Java虚拟机)调优是提高Java程序性能的重要手段之一、通过调整JVM的相关参数,可以优化内存占用、垃圾回收、线程管理等方面的性能。

以下是一些常用的JVM调优参数及其作用:1. -Xms和-Xmx:用来设置JVM的初始堆大小和最大堆大小。

一般来说,将两者设置为相同的值,可以减少系统在运行过程中动态调整堆大小的开销。

2. -Xmn:设置新生代的大小。

新生代是JVM内存中用于存放新创建的对象的区域,较小的新生代可以减少垃圾回收的开销。

3. -XX:NewRatio:设置新生代与老年代大小的比例。

默认值为2,表示新生代占整个堆大小的1/34. -XX:SurvivorRatio:设置Eden区与Survivor区的大小比例。

默认值为8,表示Eden区占整个新生代大小的8/10,Survivor区占2/10。

5. -XX:MaxPermSize:设置永久代(Permanent Generation)的大小。

永久代用于存放类的元数据、静态变量等信息,调整该参数可以避免PermGen space溢出。

6. -XX:PermSize:设置永久代的初始大小。

7. -XX:+DisableExplicitGC:禁用System.gc(方法的显式垃圾回收调用。

显式调用System.gc(可能会导致不必要的垃圾回收,影响性能。

8. -XX:MaxGCPauseMillis:设置垃圾回收的最大停顿时间。

较长的停顿时间可能导致应用程序出现卡顿的情况,而较短的停顿时间可能会增加垃圾回收的频率。

9. -XX:+UseConcMarkSweepGC:启用并发标记和清除垃圾回收器。

该垃圾回收器可以在GC时与应用程序并发执行,减少停顿时间。

10. -XX:+UseParallelGC:启用并行垃圾回收器。

该垃圾回收器可以使用多个线程并行进行垃圾回收,提高垃圾回收的效率。

11. -XX:+PrintGCDetails:打印详细的GC日志信息,包括每次GC 的时间、停顿时间、回收的对象等信息。

java jvm调优面试题

java jvm调优面试题

java jvm调优面试题在Java开发中,JVM(Java虚拟机)的性能调优是一个非常重要的方面。

优化JVM的性能可以提高应用程序的运行效率和响应速度。

为了帮助读者准备面试,本文将介绍一些与Java JVM调优相关的面试题。

以下是几个常见的问题:问题一:什么是JVM调优?JVM调优是指对Java虚拟机进行优化,以提高Java应用程序的性能和吞吐量。

通过对JVM参数的调整、内存管理以及垃圾收集等方面的优化,可以使Java应用程序更加高效地运行。

问题二:如何调整JVM的参数?可以通过在启动Java应用程序时,使用"-X"参数进行调整。

例如,可以使用"-Xms"参数调整初始堆大小,使用"-Xmx"参数调整最大堆大小。

同时,还可以使用"-XX"参数进行更加细致的调优。

问题三:有哪些常见的JVM参数?常见的JVM参数包括:- "-Xms":设置初始堆大小- "-Xmx":设置最大堆大小- "-XX:NewRatio":设置年轻代与老年代的比例- "-XX:MaxPermSize":设置永久代的最大大小(JDK8之前)- "-XX:MaxMetaspaceSize":设置元数据区的最大大小(JDK8之后)问题四:什么是垃圾收集器(GC)?垃圾收集器是JVM中负责回收无用对象的组件。

垃圾收集器通过标记、清除和压缩等过程来释放不再使用的内存,并将其回收供其他对象使用。

问题五:有哪些常见的垃圾收集器?常见的垃圾收集器包括:- Serial收集器:单线程的、使用复制算法的收集器,适用于小型应用程序或者客户端应用程序。

- Parallel收集器:多线程的、使用复制算法的收集器,适用于需要追求较高吞吐量的应用程序。

- CMS收集器:并发标记清除算法的收集器,适用于需要较短停顿时间的应用程序。

gc常用调优参数

gc常用调优参数

gc常用调优参数GC(Garbage Collection)是Java虚拟机(JVM)的一项重要功能,用于自动管理内存。

为了优化GC的性能,我们可以通过调整一些常用的参数来达到更好的效果。

本文将介绍一些常用的GC调优参数及其作用,帮助读者在实际应用中进行性能优化。

1. -Xmx和-Xms:这两个参数用来设置JVM的堆内存大小。

-Xmx 用于设置最大堆内存大小,-Xms用于设置初始堆内存大小。

合理设置这两个参数可以避免频繁的堆内存扩容和收缩,提高应用的性能。

2. -XX:NewRatio:这个参数用于设置新生代和老年代的比例。

默认情况下,新生代占整个堆内存的1/3,老年代占2/3。

根据应用的特点,可以适当调整这个比例以提高GC的效率。

3. -XX:SurvivorRatio:这个参数用于设置Eden区和Survivor区的比例。

默认情况下,Eden区占新生代的8/10,Survivor区占新生代的1/10。

根据应用的特点,可以适当调整这个比例以减少对象在Eden区的存活时间,从而减少GC的次数。

4. -XX:MaxTenuringThreshold:这个参数用于设置对象进入老年代的年龄阈值。

默认情况下,对象经过15次Minor GC仍然存活,就会被移到老年代。

根据应用的特点,可以适当调整这个阈值以减少对象进入老年代的次数,减轻老年代的GC压力。

5. -XX:+UseConcMarkSweepGC:这个参数用于启用CMS (Concurrent Mark and Sweep)垃圾收集器。

CMS收集器是一种并发收集器,可以在主线程运行的同时进行垃圾收集,减少应用的停顿时间。

适用于对响应时间要求较高的应用场景。

6. -XX:+UseG1GC:这个参数用于启用G1(Garbage-First)垃圾收集器。

G1收集器是一种面向服务端应用的垃圾收集器,可以更好地控制垃圾收集的停顿时间。

适用于内存较大的应用场景。

Java性能优化权威指南-读书笔记(二)-JVM性能调优-概述

Java性能优化权威指南-读书笔记(二)-JVM性能调优-概述

Java性能优化权威指南-读书笔记(⼆)-JVM性能调优-概述概述:JVM性能调优没有⼀个⾮常固定的设置,⽐如堆⼤⼩设置多少,⽼年代设置多少。

⽽是要根据实际的应⽤程序的系统需求,实际的活跃内存等确定。

正⽂:JVM调优⼯作流程整个调优过程是不断重复的⼀个迭代,后⾯的步骤有可能影响前⾯的配置,可能需要重新调优。

应⽤程序的系统需求确定应⽤程序的系统需求是性能调优的基础,后⾯的调优都会依赖这个要求。

⼀个应⽤不会⽆休⽌地调优下去。

1.可⽤性2.可管理性3.启动时间4.吞吐量TPS: 每秒多少次事务QPS: 每秒多少次查询5.延迟⽐如关键请求必须60ms完成响应6.内存占⽤选择JVM的部署模式单JVM部署模式:可以⽤更多的物理内存多JVM部署模式:减少了单点,不过分布式部署也解决了这个问题JVM运⾏模式32位JVM:内存空间限制为4G,关键是还进⼀步受限于操作系统,Windows⼤约1.5G,Linux⼤约3G。

64位JVM:对象指针的长度从32位变为64位,导致CPU⾼速缓存可以缓存的指针变少,降低了缓存效率。

可以开启指针压缩,解决这个问题,指针压缩在堆⼩于等于26GB时,性能最好。

JVM会根据堆⼤⼩⾃动开启这个。

垃圾收集调优基础基本原则1. 每次MinorGC都尽可能多地收集垃圾对象。

可以减少FullGC的频率,因为FullGC的持续时间总是最长;2. 处理吞吐量和延迟问题时,GC能使⽤的内存越⼤,垃圾收集的效果越好,应⽤越流畅;3. 在这三个属性(吞吐量、延迟、内存占⽤)中任意选择两个进⾏JVM垃圾收集器调优,因为三个属性肯定不能同时满⾜;GC⽇志GC⽇志是收集调优所需信息的最好途径,下⾯是⼀次MinorGC的⽇志,FullGC的⽇志和这个类似:5.483: [GC (Allocation Failure)[PSYoungGen: 142650K->16873K(145408K)]168504K->48298K(189440K), 0.0769590 secs][Times: user=0.22 sys=0.00, real=0.08 secs]1). 各属性说明5.483:是JVM启动到现在的时间戳Allocation Failure:Eden区分配内存失败,导致GC142650K(新⽣代回收前⼤⼩)->16873K(新⽣代回收后⼤⼩)(145408K(新⽣代总⼤⼩))168504K(回收前堆占⽤⼤⼩)->48298K(回收后堆占⽤⼤⼩)(189440K(堆总⼤⼩))Times:user(GC⾮操作系统指令占⽤的CPU时间)sys(GC操作系统调⽤占⽤的CPU时间)real(实际占⽤的CPU时间)2). 计算⽼年代⽅法根据上⾯这个MinorGC⽇志,可以推算出⽼年代在GC前后的⼤⼩。

常用的jvm调优参数

常用的jvm调优参数

常用的jvm调优参数JVM是Java虚拟机的缩写,是Java语言的基础。

JVM 提供了许多不同的调优参数,可用于优化Java虚拟机的性能和资源管理。

这些参数可以通过修改JVM的启动参数来配置。

本文将介绍一些常用的jvm调优参数。

1. -Xmx和-Xms这两个参数分别控制Java虚拟机的最大和最小内存使用量。

-Xmx参数指定JVM最多能够使用的堆内存大小,而-Xms参数指定JVM在启动时要使用的最小堆内存大小。

根据应用程序的需要,可以根据需要设置这些参数的值以提高Java虚拟机的性能。

2. -XX:PermSize和-XX:MaxPermSize这些参数指定了Java虚拟机的永久代大小。

永久代是Java虚拟机中的一部分内存,用于存储应用程序类信息、方法、变量名等元数据信息。

通过修改这些参数的值,可以显着减少Java虚拟机的内存使用。

3. -XX:+UseConcMarkSweepGC和-XX:+UseG1GC这些参数指定了Java虚拟机使用的GC算法。

ConcMarkSweepGC是一种并发垃圾收集算法,G1GC则是一种较为新的并发GC算法。

使用-ConcMarkSweepGC参数时,垃圾收集器将并发执行,并在应用程序继续运行的同时回收内存。

使用-UseG1GC参数时,GC算法将把所有内存分为若干小块,每次只回收其中的一部分,以减少垃圾回收的延迟时间。

4. -XX:MaxTenuringThreshold和-XX:SurvivorRatio这些参数控制Java虚拟机在执行垃圾回收时的行为。

MaxTenuringThreshold参数指定对象在“老年代”中存活的时间阈值,而SurvivorRatio参数指定Eden空间与Survivor空间的大小比例。

通过对这些参数的调整,可以优化垃圾回收器的性能。

5. -XX:+UseParallelGC和-XX:+UseParallelOldGC这些参数可用于控制Java虚拟机使用的垃圾收集器。

JVM虚拟机性能调优调试

JVM虚拟机性能调优调试

JVM虚拟机性能调优调试JVM虚拟机性能调优调试JVM(Java虚拟机)是Java运行环境的重要组成部分,它负责将Java字节码转换为机器码并执行。

然而,在开发和部署Java应用程序时,我们经常会遇到性能瓶颈和调试问题。

本文将介绍如何进行JVM虚拟机性能调优调试,以提高Java应用程序的运行效率。

1. 监控工具的使用监控工具是进行JVM性能调优的重要工具。

JVM自带了一些常用的监控工具,例如JConsole和VisualVM。

它们可以提供关于JVM运行状态的详细信息,包括内存使用情况、线程状态和垃圾回收情况等。

通过监控工具,我们可以及时发现潜在的性能问题,并采取相应的措施进行调优。

2. 垃圾回收调优垃圾回收是JVM自动管理内存的重要机制,但不正确的垃圾回收策略可能会导致性能下降。

调优垃圾回收可以通过调整JVM的参数来实现。

例如,可以通过-Xms和-Xmx参数来调整堆内存的初始大小和最大大小,以避免频繁的垃圾回收。

另外,可以通过调整-XX:NewRatio参数来平衡新生代和老年代的比例,以减少Full GC的次数。

3. 线程管理和调优线程是Java应用程序的重要组成部分,正确地管理和调优线程可以提高应用程序的性能。

首先,应避免创建过多的线程,因为线程的创建和销毁是有开销的。

其次,可以通过调整线程池的大小来优化线程的使用。

合理地设置线程池的核心线程数和最大线程数,可以避免线程过多导致的性能下降和资源浪费。

4. JVM参数调优JVM的参数设置对应用程序的性能有很大的影响。

可以通过调整JVM的参数来优化应用程序的性能。

例如,可以通过调整-XX:MaxPermSize参数来增加永久代的大小,以避免出现PermGen Space的OOM错误。

另外,可以通过调整-XX:MaxHeapFreeRatio参数来控制堆内存的空闲比例,以减少Full GC的次数。

5. 代码优化除了调优JVM的参数和配置,代码优化也是提高应用程序性能的重要手段。

JVM垃圾回收机制原理及调优

JVM垃圾回收机制原理及调优

JVM垃圾回收机制原理及调优JVM(Java Virtual Machine)是Java程序的运行环境,可以将Java字节码转换为机器码并执行程序。

其中一个重要的机制就是垃圾回收(Garbage Collection,GC),它负责自动释放不再使用的内存资源,以提高内存的利用率。

JVM中的垃圾回收机制基于两个核心概念:引用和可达性。

引用是指在程序中使用一个对象的指针。

Java中有四种类型的引用:强引用、软引用、弱引用和虚引用。

强引用是最常见的引用类型,只有当没有任何强引用指向一个对象时,垃圾回收器才会回收该对象。

软引用和弱引用可以用来实现缓存功能,如果内存不足时,垃圾回收器会回收这些对象。

虚引用是最弱的引用类型,主要用于对象被回收前的通知。

可达性是指对象能否通过引用链被访问到。

在Java中,垃圾回收器通过从GC Roots(如活动线程、静态变量、方法区中的类静态常量等)出发,追踪所有的引用链,可以到达的对象被认为是可达的,而无法到达的对象则被判定为垃圾。

JVM的垃圾回收机制有多种算法,常见的有标记清除、复制、标记整理、分代回收等。

标记清除算法是最基本的垃圾回收算法,分为两个阶段。

首先,垃圾回收器从根对象出发,将所有的可达对象进行标记。

然后,在标记完成后,垃圾回收器对堆内存进行扫描,将所有未被标记的内存块视为垃圾,进行回收。

复制算法将内存分为两个区域,一半被称为"from"空间,另一半被称为"to"空间。

对象首先存储在from空间,当垃圾回收发生时,将有效的对象存储到to空间并压缩,然后清空from空间。

通过多次复制过程,可以避免内存碎片化问题。

标记整理算法是在标记清除算法基础上的改进,它会在标记阶段将所有的可达对象进行标记,并在垃圾回收阶段将标记的对象整理到内存的一侧,从而减少碎片化问题。

分代回收算法根据对象的生命周期将内存划分为不同的代。

一般将新创建的对象放在新生代,时间经受住垃圾回收的对象放在年老代。

JVM内存调优原则及几种JVM内存调优方法

JVM内存调优原则及几种JVM内存调优方法

JVM内存调优原则及⼏种JVM内存调优⽅法1、堆⼤⼩设置。

2、回收器选择。

1、在对JVM内存调优的时候不能只看操作系统级别Java进程所占⽤的内存,这个数值不能准确的反应堆内存的真实占⽤情况,因为GC 过后这个值是不会变化的,因此内存调优的时候要更多地使⽤JDK提供的内存查看⼯具,⽐如JConsole和Java VisualVM。

2、对JVM内存的系统级的调优主要的⽬的是减少GC的频率和Full GC的次数,过多的GC和Full GC是会占⽤很多的系统资源(主要是CPU),影响系统的吞吐量。

特别要关注Full GC,因为它会对整个堆进⾏整理,导致Full GC⼀般由于以下⼏种情况:⼀、导致Full GC⼀般由于以下⼏种情况:1、旧⽣代空间不⾜ 调优时尽量让对象在新⽣代GC时被回收、让对象在新⽣代多存活⼀段时间和不要创建过⼤的对象及数组避免直接在旧⽣代创建对象2、Pemanet Generation空间不⾜ 增⼤Perm Gen空间,避免太多静态对象 统计得到的GC后晋升到旧⽣代的平均⼤⼩⼤于旧⽣代剩余空间 控制好新⽣代和旧⽣代的⽐例3、System.gc()被显⽰调⽤ 垃圾回收不要⼿动触发,尽量依靠JVM⾃⾝的机制⼆、主要的调优⼿段调优⼿段主要是通过控制堆内存的各个部分的⽐例和GC策略来实现,内存⽐例不良设置会导致⼀下不良后果:1). 新⽣代设置过⼩ ⼀是新⽣代GC次数⾮常频繁,增⼤系统消耗;⼆是导致⼤对象直接进⼊旧⽣代,占据了旧⽣代剩余空间,诱发Full GC2). 新⽣代设置过⼤ ⼀是新⽣代设置过⼤会导致旧⽣代过⼩(堆总量⼀定),从⽽诱发Full GC;⼆是新⽣代GC耗时⼤幅度增加 ⼀般说来新⽣代占整个堆1/3⽐较合适3). Survivor设置过⼩ 导致对象从eden直接到达旧⽣代,降低了在新⽣代的存活时间4). Survivor设置过⼤ 导致eden过⼩,增加了GC频率。

另外,通过-XX:MaxTenuringThreshold=n来控制新⽣代存活时间,尽量让对象在新⽣代被回收三、新⽣代和旧⽣代GC策略和组合搭配:由内存管理和垃圾回收可知新⽣代和旧⽣代都有多种GC策略和组合搭配,选择这些策略对于我们这些开发⼈员是个难题,JVM提供两种较为简单的GC策略的设置⽅式。

Java-技术专区-JVM调优常用参数

Java-技术专区-JVM调优常用参数

Java-技术专区-JVM调优常⽤参数1.调优的⽬的1.控制GC的⾏为:GC是⼀个后台处理,但是它也是会消耗系统性能的,因此经常会根据系统运⾏的程序的特性来更改GC⾏为。

2.控制JVM堆栈⼤⼩:JVM在内存分配上不需要你修改,但是当你的程序新⽣代对象在某个时间段产⽣的⽐较多的时候,就需要控制新⽣代的堆⼤⼩,同时,还要需要控制总的JVM⼤⼩避免内存溢出。

3.控制JVM线程的内存分配:如果是多线程程序,产⽣线程和线程运⾏所消耗的内存也是可以控制的,需要通过⼀定时间的观测后,配置最优结果。

2、GC 事件分类根据垃圾收集回收的区域不同,垃圾收集主要分为:2.1 Young GC(⼜称Minor GC、YGC)新⽣代内存的垃圾收集事件称为 Young GC(⼜称 Minor GC),当 JVM ⽆法为新对象分配在新⽣代内存空间时总会触发 Young GC。

⽐如 Eden 区占满时,新对象分配频率越⾼,Young GC 的频率就越⾼。

Young GC 每次都会引起全线停顿(Stop-The-World),暂停所有的应⽤线程,停顿时间相对⽼年代 GC 造成的停顿,⼏乎可以忽略不计。

2.2 Old GC(⼜称Major GC)只清理⽼年代空间的 GC 事件,只有 CMS 的并发收集是这个模式。

2.3 Full GC清理整个堆的GC事件,包括新⽣代、⽼年代、元空间等。

2.4 Mixed GC清理整个新⽣代以及部分⽼年代的 GC,只有 G1 有这个模式。

3、常⽤参数总结3.1 堆设置-Xms:初始堆⼤⼩-Xmx:最⼤堆⼤⼩-Xmn:新⽣代⼤⼩-Xss:线程堆栈⼤⼩,默认为1M-XX:NewRatio=n:设置新⽣代和年⽼代的⽐值,默认为1:2。

如为3,表⽰新⽣代与年⽼代⽐值为1:3,年轻代占整个年轻代年⽼代和的1/4-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的⽐值。

注意Survivor区有两个。

JVM的内存机制介绍

JVM的内存机制介绍

JVM的内存机制介绍JVM(Java Virtual Machine)是Java程序的运行环境,它负责解释和执行Java字节码,以及管理Java程序的内存使用。

JVM的内存机制包括堆内存和非堆内存,其中堆内存又分为新生代和老年代。

本文将详细介绍JVM的内存机制。

1.堆内存堆内存是Java程序运行时存储对象实例的地方。

在JVM启动时,就会分配一个固定大小的堆内存空间。

堆内存又分为新生代和老年代。

1.1新生代新生代是新创建的对象的存储区域,通常用于存放生命周期较短的对象。

它又分为Eden空间、Survivor0空间和Survivor1空间。

- Eden空间:是对象最初被创建的地方。

当Eden空间不够存放新创建的对象时,触发Minor GC(年轻代垃圾收集器)对Eden空间进行垃圾回收,将仍然存活的对象复制到Survivor0或Survivor1空间中。

- Survivor0和Survivor1空间:是存放经过一次Minor GC后仍然存活的对象的地方。

当Survivor空间不够存放存活对象时,触发Minor GC,将仍然存活的对象复制到另一个Survivor空间中,同时对原空间进行垃圾回收。

1.2老年代老年代是存放长时间存活的对象的地方,通常存放生命周期较长的对象。

当一个对象经过多次Minor GC后仍然存活,就会被晋升到老年代中。

老年代的垃圾回收称为Major GC(Full GC),它会对整个堆空间进行垃圾回收。

2.非堆内存非堆内存是用来存放程序数据和JVM自身数据的地方,它不是由Java虚拟机管理的内存区域。

在Java8及之前的版本中,非堆内存主要包括方法区和本地方法栈。

2.1方法区方法区用于存放类的结构信息,包括类、方法、字段、静态变量等。

方法区的大小是固定的,通过设置JVM参数进行配置。

在方法区中,通过不同的垃圾回收算法对被废弃的类进行垃圾回收。

2.2本地方法栈本地方法栈用于执行本地方法(即非Java语言编写的方法,例如C/C++),它提供了Java和本地方法之间的接口。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

jvm调优其实就是对Young代的次数与时间调优最近在做埋点监控,做到jvm这一块。

刚好可以理一下思路:看过很多jvm理论的文章,总觉得讲得太复杂了,但用来也就那么几个参数。

so ,化繁为简,只记我要用的。

1.为什么会OOM溢出,是持久代满了。

2.堆与栈(非堆no-heap)区别,堆主要用于存储new 信息,栈用于线程开销,通过jstat pid 100s 查看栈的一般都是水平的趋势。

3.堆又分eden ,survivor区,由eden向survivor copy.常常说的调优,主要是对针gc 次数,时间,而这一块主要集中在Yong代,而设置的-xmx(最大),-xms(最小)的大小又与gc 的频率与次数有关。

4.gc回收机制常用的有五种,可以组合使用5.jvm 不复杂,设置内存最大小值,线程数据,持久代数据,真正考验功力的是根据不同的使用场景选用合适的gc回收机机制,合理设置内存,线程,持久代数据6.jstat的用法以下是选用别的人作为参考理JVM学习笔记之JVM内存管理和JVM垃圾回收的概念,JVM内存结构由堆、栈、本地方法栈、方法区等部分组成,另外JVM分别对新生代和旧生代采用不同的垃圾回收机制。

首先来看一下JVM内存结构,它是由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示。

JVM学习笔记JVM内存管理和JVM垃圾回收JVM内存组成结构JVM内存结构由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示:1)堆所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xmx和-Xms来控制。

堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Survivor区,最后Survivor由FromSpace和ToSpace组成,结构图如下所示:新生代。

新建的对象都是用新生代分配内存,Eden空间不足的时候,会把存活的对象转移到Survivor 中,新生代大小可以由-Xmn来控制,也可以用-XX:SurvivorRatio来控制Eden和Survivor的比例旧生代。

用于存放新生代中经过多次垃圾回收仍然存活的对象2)栈每个线程执行每个方法的时候都会在栈中申请一个栈帧,每个栈帧包括局部变量区和操作数栈,用于存放此次方法调用过程中的临时变量、参数和中间结果3)本地方法栈用于支持native方法的执行,存储了每个native方法调用的状态4)方法区存放了要加载的类信息、静态变量、final类型的常量、属性和方法信息。

JVM用持久代(PermanetGeneration)来存放方法区,可通过-XX:PermSize和-XX:MaxPermSize来指定最小值和最大值。

介绍完了JVM内存组成结构,下面我们再来看一下JVM垃圾回收机制。

JVM垃圾回收机制JVM分别对新生代和旧生代采用不同的垃圾回收机制新生代的GC:新生代通常存活时间较短,因此基于Copying算法来进行回收,所谓Copying算法就是扫描出存活的对象,并复制到一块新的完全未使用的空间中,对应于新生代,就是在Eden和FromSpace或ToSpace 之间copy。

新生代采用空闲指针的方式来控制GC触发,指针保持最后一个分配的对象在新生代区间的位置,当有新的对象要分配内存时,用于检查空间是否足够,不够就触发GC。

当连续分配对象时,对象会逐渐从eden到survivor,最后到旧生代,用javavisualVM来查看,能明显观察到新生代满了后,会把对象转移到旧生代,然后清空继续装载,当旧生代也满了后,就会报outofmemory的异常,如下图所示:在执行机制上JVM提供了串行GC(SerialGC)、并行回收GC(ParallelScavenge)和并行GC(ParNew)1)串行GC在整个扫描和复制过程采用单线程的方式来进行,适用于单CPU、新生代空间较小及对暂停时间要求不是非常高的应用上,是client级别默认的GC方式,可以通过-XX:+UseSerialGC来强制指定2)并行回收GC在整个扫描和复制过程采用多线程的方式来进行,适用于多CPU、对暂停时间要求较短的应用上,是server级别默认采用的GC方式,可用-XX:+UseParallelGC来强制指定,用-XX:ParallelGCThreads=4来指定线程数3)并行GC与旧生代的并发GC配合使用旧生代的GC:旧生代与新生代不同,对象存活的时间比较长,比较稳定,因此采用标记(Mark)算法来进行回收,所谓标记就是扫描出存活的对象,然后再进行回收未被标记的对象,回收后对用空出的空间要么进行合并,要么标记出来便于下次进行分配,总之就是要减少内存碎片带来的效率损耗。

在执行机制上JVM提供了串行GC(SerialMSC)、并行GC(parallelMSC)和并发GC(CMS),具体算法细节还有待进一步深入研究。

以上各种GC机制是需要组合使用的,指定方式由下表所示:jstate用法:Jstat 是JDK自带的一个轻量级小工具。

全称―Java Virtual Machine statistics monitoring tool‖,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。

可见,Jstat是轻量级的、专门针对JVM 的工具,非常适用。

由于JVM内存设置较大,图中百分比变化不太明显一个极强的监视VM内存工具。

可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。

jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。

使用时,需加上查看进程的进程id,和所选参数。

执行:cd $JAVA_HOME/bin中执行jstat,注意jstat后一定要跟参数。

语法结构:Usage: jstat -help|-optionsjstat -<option> [-t] [-h<lines>] <vmid> [<interva[s|ms]> [<count>]]参数解释:Options —选项,我们一般使用 -gcutil 查看gc情况vmid — VM的进程号,即当前运行的java进程号interval[s|ms] ——间隔时间,单位为秒或者毫秒,默认为ms。

必须是正整型。

count —打印次数,如果缺省则打印无数次输出参数:-hn 每个n行输出一次列表头。

默认为0,仅输出一次。

-tn 在第一列输出时间戳。

该时间戳从jvm启动开始。

-JjavaOption具体参数:-class:统计class loader 行为信息-compiler:统计编译行为信息-gc:统计jdk gc时heap信息-gccapacity:统计不同的generations(新生代、老生代、永久代)相应的heap容量信息-gccause:统计gc的情况,以及引起gc的事情。

同-gcutil-gcnew:统计新生代的gc情况-gcnewcapacity:统计新生代gc时heap的容量信息-gcold:统计老生代的gc情况-gcoldcapacity:统计老生代gc时heap容量信息-gcpermcapacity:统计永久代gc时的容量信息-gcutil:统计heap的gc情况-printcompilation:没用过jstat -gcutil :结果信息:S0 — Heap上的 Survivor space 0 区已使用空间的百分比S1 — Heap上的 Survivor space 1 区已使用空间的百分比E — Heap上的 Eden space 区已使用空间的百分比O — Heap上的 Old space 区已使用空间的百分比P — Perm space 区已使用空间的百分比YGC —从应用程序启动到采样时发生 Young GC 的次数YGCT–从应用程序启动到采样时 Young GC 所用的时间(单位秒)FGC —从应用程序启动到采样时发生 Full GC 的次数FGCT–从应用程序启动到采样时 Full GC 所用的时间(单位秒)GCT —从应用程序启动到采样时用于垃圾回收的总时间(单位秒)jstat -gcutil 21891 250 721891 进程号; 250ms 采样interval; 7 countS0 S1 E O P YGC YGCT FGC FGCT GCT12.44 0.00 27.20 9.49 96.70 78 0.176 5 0.495 0.67212.44 0.00 62.16 9.49 96.70 78 0.176 5 0.495 0.67212.44 0.00 83.97 9.49 96.70 78 0.176 5 0.495 0.6720.00 7.74 0.00 9.51 96.70 79 0.177 5 0.495 0.6730.00 7.74 23.37 9.51 96.70 79 0.177 5 0.495 0.6730.00 7.74 43.82 9.51 96.70 79 0.177 5 0.495 0.6730.00 7.74 58.11 9.51 96.71 79 0.177 5 0.495 0.673以上输出表明:1. 在第三行与第四行,发生一次新生代gc。

本次gc耗时0.001秒,且有对象从Eden区提升到老生代,老生代使用率从9.49% 上升到9.51%。

2. gc之前,survivor space 使用率12.44%, gc后,降为7.74%。

jstat -gcnew -h3 21891 250-h3:每隔三行输出一次列表头; 21891:进程号; 250: interval采样间隔,ms; count不设置,表示打印无数次S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT64.0 64.0 0.0 31.7 31 31 32.0 512.0 178.6 249 0.20364.0 64.0 0.0 31.7 31 31 32.0 512.0 355.5 249 0.20364.0 64.0 35.4 0.0 2 31 32.0 512.0 21.9 250 0.204S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT64.0 64.0 35.4 0.0 2 31 32.0 512.0 245.9 250 0.20464.0 64.0 35.4 0.0 2 31 32.0 512.0 421.1 250 0.20464.0 64.0 0.0 19.0 31 31 32.0 512.0 84.4 251 0.204S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT64.0 64.0 0.0 19.0 31 31 32.0 512.0 306.7 251 0.204以上输出表明:1. S0U: survivor space 0 utilizationDSS: desired survivor SizeTT: tenuring threshold 阀值,用于控制对象在新生代存活的最大次数2. 第二行和第三行之间,发生一次新生代gc。

相关文档
最新文档