java面试题jvm调优(jvm 性能调优工具之 jstat 命令详解)

:暂无数据 2026-09-02 18:30:06 :1

java面试题jvm调优(jvm 性能调优工具之 jstat 命令详解)

今天给各位分享jvm 性能调优工具之 jstat 命令详解的知识,其中也会对jvm 性能调优工具之 jstat 命令详解进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录

jvm 性能调优工具之 jstat 命令详解

Jstat名称:Java Virtual Machine statistics monitoring tool

功能描述:

Jstat是JDK自带的一个轻量级小工具。它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。

命令用法:jstat
     注意:使用的jdk版本是jdk8。

C:\Users\Administrator》jstat -helpUsage: jstat -help|-options jstat -《option》 Where 《n》 is an integer and the suffix specifies the units as milliseconds("ms") or seconds("s"). The default units are "ms". 《count》 Number of samples to take before terminating. -J《flag》 Pass 《flag》 directly to the runtime system.
option:参数选项
-t:可以在打印的列加上Timestamp列,用于显示系统运行的时间
-h:可以在周期性数据输出的时候,指定输出多少行以后输出一次表头
vmid:Virtual Machine ID( 进程的 pid)
interval:执行每次的间隔时间,单位为毫秒
count:用于指定输出多少次记录,缺省则会一直打印
option 可以从下面参数中选择

jstat -options

-class 用于查看类加载情况的统计
-compiler 用于查看HotSpot中即时编译器编译情况的统计
-gc 用于查看JVM中堆的垃圾收集情况的统计
-gccapacity 用于查看新生代、老生代及持久代的存储容量情况
-gcmetacapacity 显示metaspace的大小
-gcnew 用于查看新生代垃圾收集的情况
-gcnewcapacity 用于查看新生代存储容量的情况
-gcold 用于查看老生代及持久代垃圾收集的情况
-gcoldcapacity 用于查看老生代的容量
-gcutil 显示垃圾收集信息
-gccause 显示垃圾回收的相关信息(通-gcutil),同时显示最后一次仅当前正在发生的垃圾收集的原因
-printcompilation 输出JIT编译的方法信息
示例:

1.-class 类加载统计

# jstat -class 3346 #统计JVM中加载的类的数量与sizeLoaded Bytes Unloaded Bytes Time 1527 2842.7 0 0.0 1.02
Loaded:加载类的数量
Bytes:加载类的size,单位为Byte
Unloaded:卸载类的数目
Bytes:卸载类的size,单位为Byte
Time:加载与卸载类花费的时间
2.-compiler 编译统计

# jstat -compiler 3346 #用于查看HotSpot中即时编译器编译情况的统计Compiled Failed Invalid Time FailedType FailedMethod 404 0 0 0.19 0
Compiled:编译任务执行数量
Failed:编译任务执行失败数量
Invalid:编译任务执行失效数量
Time:编译任务消耗时间
FailedType:最后一个编译失败任务的类型
FailedMethod:最后一个编译失败任务所在的类及方法
3.-gc 垃圾回收统计

# jstat -gc 3346 #用于查看JVM中堆的垃圾收集情况的统计 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 128.0 128.0 0.0 128.0 1024.0 919.8 15104.0 2042.4 8448.0 8130.4 1024.0 996.0 7 0.019 0 0.000 0.019
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
OC:Old代的容量 (字节)
OU:Old代目前已使用空间 (字节)
MC:metaspace(元空间)的容量 (字节)
MU:metaspace(元空间)目前已使用空间 (字节)
CCSC:当前压缩类空间的容量 (字节)
CCSU:当前压缩类空间目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)
4.-gccapacity 堆内存统计

# jstat -gccapacity -h5 3346 1000 #-h5:每5行显示一次表头 1000:每1秒钟显示一次,单位为毫秒 NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0 NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
NGCMN:年轻代(young)中初始化(最小)的大小(字节)
NGCMX:年轻代(young)的最大容量 (字节)
NGC:年轻代(young)中当前的容量 (字节)
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
OGCMN:old代中初始化(最小)的大小 (字节)
OGCMX:old代的最大容量(字节)
OGC:old代当前新生成的容量 (字节)
OC:Old代的容量 (字节)
MCMN:metaspace(元空间)中初始化(最小)的大小 (字节)
MCMX:metaspace(元空间)的最大容量 (字节)
MC:metaspace(元空间)当前新生成的容量 (字节)
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:从应用程序启动到采样时年轻代中gc次数
FGC:从应用程序启动到采样时old代(全gc)gc次数
5.-gcmetacapacity 元数据空间统计

# jstat -gcmetacapacity 3346 #显示元数据空间的大小MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 8 0 0.000 0.020
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:从应用程序启动到采样时年轻代中gc次数
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)
6.-gcnew 新生代垃圾回收统计

# jstat -gcnew 3346 #用于查看新生代垃圾收集的情况S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT128.0 128.0 67.8 0.0 1 15 64.0 1024.0 362.2 8 0.020  
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
TT:持有次数限制
MTT:最大持有次数限制
DSS:期望的幸存区大小
EC:年轻代中Eden(伊甸园)的容量 (字节)
EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
7.-gcnewcapacity 新生代内存统计

# jstat -gcnewcapacity 3346 #用于查看新生代存储容量的情况NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC1280.0 83264.0 1280.0 8320.0 128.0 8320.0 128.0 66624.0 1024.0 8 0
NGCMN:年轻代(young)中初始化(最小)的大小(字节)
NGCMX:年轻代(young)的最大容量 (字节)
NGC:年轻代(young)中当前的容量 (字节)
S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1CMX:年轻代中第二个survivor(幸存区)的最大容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
FGC:从应用程序启动到采样时old代(全gc)gc次数
8.-gcold 老年代垃圾回收统计

# jstat -gcold 3346 #用于查看老年代及持久代垃圾收集的情况MC MU CCSC CCSU OC OU YGC FGC FGCT GCT8448.0 8227.5 1024.0 1003.7 15104.0 2102.2 8 0 0.000 0.020 
MC:metaspace(元空间)的容量 (字节)
MU:metaspace(元空间)目前已使用空间 (字节)
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
OC:Old代的容量 (字节)
OU:Old代目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)
9.-gcoldcapacity 老年代内存统计

# jstat -gcoldcapacity 3346 #用于查看老年代的容量OGCMN OGCMX OGC OC YGC FGC FGCT GCT15104.0 166592.0 15104.0 15104.0 8 0 0.000 0.020
OGCMN:old代中初始化(最小)的大小 (字节)OGCMX:old代的最大容量(字节)OGC:old代当前新生成的容量 (字节)OC:Old代的容量 (字节)YGC:从应用程序启动到采样时年轻代中gc次数FGC:从应用程序启动到采样时old代(全gc)gc次数FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)GCT:从应用程序启动到采样时gc用的总时间(s) 在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
10.-gcutil 垃圾回收统计

# jstat -gcutil 3346 #显示垃圾收集信息S0 S1 E O M CCS YGC YGCT FGC FGCT GCT52.97 0.00 42.10 13.92 97.39 98.02 8 0.020 0 0.000 0.020 
S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E:年轻代中Eden(伊甸园)已使用的占当前容量百分比
O:old代已使用的占当前容量百分比
M:元数据区已使用的占当前容量百分比
CCS:压缩类空间已使用的占当前容量百分比
YGC :从应用程序启动到采样时年轻代中gc次数
YGCT :从应用程序启动到采样时年轻代中gc所用时间(s)
FGC :从应用程序启动到采样时old代(全gc)gc次数
FGCT :从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)
11.-gccause

# jstat -gccause 3346 #显示垃圾回收的相关信息(通-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC52.97 0.00 46.09 13.92 97.39 98.02 8 0.020 0 0.000 0.020 Allocation Failure No GC
LGCC:最后一次GC原因
GCC:当前GC原因(No GC 为当前没有执行GC)
12.-printcompilation JVM编译方法统计

# jstat -printcompilation 3346 #输出JIT编译的方法信息Compiled Size Type Method421 60 1 sun/nio/ch/Util$2 clear
Compiled:编译任务的数目
Size:方法生成的字节码的大小
Type:编译类型
Method:类名和方法名用来标识编译的方法。类名使用/做为一个命名空间分隔符。方法名是给定类中的方法。上述格式是由-XX:+PrintComplation选项进行设置的
远程监控

与jps一样,jstat也支持远程监控,同样也需要开启安全授权,方法参照jps。

C:\Users\Administrator》jps 192.168.146.1283346 QuorumPeerMain3475 JstatdC:\Users\Administrator》jstat -gcutil 3346@192.168.146.128 S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 52.97 0.00 65.15 13.92 97.39 98.02 8 0.020 0 0.000 0.020

Java程序性能优化--让你的Java程序更快、更稳定

   第 章 Java性能调优概述

   性能概述

   看懂程序的性能

   性能的参考指标

   木桶原理与性能瓶颈

   Amdahl定律

   设计调优

   代码调优

   JVM调优

   数据库调优

   操作系统调优

   优化的一般步骤

   系统优化注意事项

   小结

   第 章设计优化

   善用设计模式

   单例模式( )

   单例模式( )

   单例模式( )

   代理模式( )

   代理模式( )

   代理模式( )

   代理模式( )

   代理模式( )

   代理模式( )

   代理模式( )

   享元模式( )

   享元模式( )

   装饰者模式( )

   装饰者模式( )

   装饰者模式( )

   装饰者模式( )

   观察者模式( )

   观察者模式( )

   观察者模式( )

   Value Object模式( )

   Value Object模式( )

   业务代理模式( )

   业务代理模式( )

   缓冲(Buffer)( )

   缓冲(Buffer)( )

   缓存(Cache)( )

   缓存(Cache)( )

   缓存(Cache)( )

   对象复用 池 ( )

   对象复用 池 ( )

   对象复用 池 ( )

   对象复用 池 ( )

   对象复用 池 ( )

   并行替代串行

   负载均衡( )

   负载均衡( )

   负载均衡( )

   负载均衡( )

   时间换空间

   空间换时间

   小结

   推荐

       Java程序设计培训视频教程

       J EE高级框架实战培训视频教程

       J ME移动开发实战教学视频

  Visual C++音频/视频技术开发与实战

  Oracle索引技术

lishixinzhi/Article/program/Java/gj/201311/27852

看完阿里程序员做JVM调优,让我明白12K和40K的差距在哪

怎样才能做好性能调优?

关于性能调优,我先来说说的我的感受。Java性能调优不像是学一门编程语言,无法通过直线式的思维来掌握和应用,它对于工程师的技术广度和深度都有着较高的要求。

互联网时代,一个简单的系统就囊括了应用程序、数据库、容器、操作系统、网络等技术,线上一旦出现性能问题,就可能要你协调多方面组件去进行优化,这就是技术广度;而很多性能问题呢,又隐藏得很深,可能因为一个小小的代码,也可能因为线程池的类型选择错误..可归根结底考验的还是我们对这项技术的了解程度,这就是技术深度。

显然,性能调优不是一件容易的事。但有没有什么方法能把这件事情做好呢?

在这篇文章里,将从实战出发,精选高频性能问题,透过 Java 底层源码,提炼出优化思 路和它背后的实现原理,最后形成一套“学完就能用的调优方法论”。这也是很多一线大厂 对于高级工程师的要求,希望通过这个文章帮助你快速进阶。

Java调优

性能调优策略图

设计调优

JVM调优

多线程调优

数据库调优

Java程序优化

并行程序开发及优化

Java性能调优工具


实战演练场

最后

这篇文章适合所有Java程序员、软件设计师、架构师以及软件开发爱好者,对于在一定经验的java工程师,更能帮助突破技术瓶颈,深入Java内核开发!

希望本文能够在工作中对读者有所帮助。

为本地IDE运行设置JVM启动参数调优

本次通过 VisulVm 进行线程的堆区观察,关于在应用运行时,所占用内存发生OOM

切换到JDK的bin目录下,调查堆是否发生OOM
console : java -XX:+PrintCommandLineFlags -version

Output
这里显示 堆的最大值大小为 MaxHeapSize ,这里的MaxHeapSize可能和VisulVm中堆的最大值有所偏差,
这是因为 虚拟机的内存对齐 ,我们暂时以控制台显示的最大堆值为标准,对比VisulVm中观察到的堆内存大小

上图可以看出来为最大堆为 2124414976B ,从2:30开始出现内存抖动。怀疑是因为在jvm启动时,
没有设置年轻代和老年代的分配比例,导致年轻代被频繁GC,故在idea的 VM OPTIONS 中设置

-XX:NewRatio=2
可以看到从2:30之后,内存的增长速度趋于平缓,可以看出没有发生频繁GC

但系统仍然被占用较大的内存,继续分析idea所属进程

发现idea进程中占用最多的是idea程序本身的内存,尝试设置运行时最大堆的上限

VM OPTIONS : -XX:NewRatio=2 -XX:+HeapDumpOnOutOfMemoryError -Xmx1024m -Xms1024m -XX:HeapDumpPath=d:\dump

VisulVM显示如下图

可以看到虽然设置了最大堆上限为默认的1024mb,但是内存增长的速度依然很快

比较初始化堆的峰值,即图三中一开始出现堆内存峰值的时间点 分配: 116916114b = 115MB
考虑到除了java堆之外,可能还有其它区域占用内存空间,见 深入理解java虚拟机
VM OPTIONS 设置为 -XX:NewRatio=2 -XX:+HeapDumpOnOutOfMemoryError -Xmx1024m -Xms130m -XX:HeapDumpPath=d:\dump

ps:为什么考虑到需要调节初始化堆的大小呢?

让我们呢看一看目录下输出的日志文件

hs_err_pid13036.log

建议大家对于当前测试线程不清楚的时候可以多是实在jvm启动参数里设置OOM的输出日志文件,以便于查找错误

但这只是简单的分配年轻代和老年代,那有没有适合分代的回收调参呢
根据本机8G双核的机器配置,采用Parnew+cms收集器,年轻代加快复制次数,老年代减少停顿时间。idea最终调优如下

更大型系统的jvm调优请参考 大型跨境电商JVM调优

无锡英臻科技面试题是什么

JVM如何调优。一面hr面试,问了一下目前的工作,做过的项目,和薪资待遇情况,二面技术面试,问了项目中用到的技术,spring的问题,题目包括,JVM如何调优。无锡英臻科技有限公司于2009年08月07日在无锡市新吴区市场监督管理局登记成立,公司经营范围包括计算机软硬件的技术开发、技术转让、技术咨询等。

Java编程中的性能优化如何实现

性能优化我觉得应该分两步走,第一步:寻找性能瓶颈,第二步:性能调优;

下面分别进行分析:

第一步:寻找性能瓶颈

通常性能瓶颈的表象是资源消耗过多、外部处理系统的性能不足;或者资源消耗不多,但是程序效应还是很慢;

资源主要消耗在cpu,文件io,网络io以及内存方面,当某一资源消耗过多会造成系统响应慢;

外部处理系统的性能不足主要是所调用其他系统提供的功能或数据库的响应速度不够,外部系统慢可能也是资源消耗过多导致,数据库响应慢可以对数据库进行调优;

资源消耗不多但仍然慢主要原因是程序代码运行效率不高,未充分使用资源或程序结构不合理;

1.1cpu消耗分析

可以通过相关命令比如top,pidstat,找出各个类型消耗cpu的占比,最常见的就是us和sy类型分别代表用户进程消耗和线程间切换消耗;如果us过高可以找到相关的线程ID然后分析代码;如果sy过高是不是启动了过多的线程导致线程切换过多;

1.2文件io消耗

要跟踪线程的文件IO消耗,可以通过pidstat来查找,可以查到每秒的读写kb数;找到读写kb数多个线程,然后结合jstack找到相关的java代码,然后分析;

1.3网络io消耗

可以通过sar来分析网络的消耗状况,但是不能具体到每个线程所消耗的网络IO,只能对线程dump,查找产生了大量网络io的线程;

1.4内存消耗

结合top或pidstat,以及jvm的内存分析工具来分析内存消耗;要区分是jvm外的物理内存还是jvmheap区内存;如果是jvm外的物理内存要分析程序中DirectByteBuffer,如果是jvmheap可以通过jvisualvm来分析;

1.5资源消耗不多但仍然慢

主要原因是:锁竞争激烈,未充分使用硬件资源,数据量增长

第二步:性能调优

2.1jvm调优

主要包括各个代的大小、GC策略等;代大小的设置:避免新生代大小设置过小,或者过大;避免Survivor区过小或过大;合理设置新生代存活周期;GC策略根据吞吐量优先还是延迟优先进行设置策略;

2.2程序调优

1.CPU消耗严重解决

us过高主要是执行线程无任何挂起动作,可以进行Thread.sleep操作;sy过高主要是因为创建了过多的线程导致线程上下文切换;

2.文件IO消耗严重解决

造成文件IO消耗严重的原因主要是多个线程写大量的数据到同一个文件,导致文件很快变的很大,从而写入速度越来越慢,并造成各线程激烈竞争争抢文件锁,常用的调优方法:异步写文件,批量读写,限流,限制文件大小;

3.网络IO消耗严重解决

主要原因是同时发送或者接受的包太多,解决办法就是限流;

4.内存消耗严重解决

解决:释放不必要的引用,使用对象缓存池,采用合理的缓存失效策略,合理使用softReference和WeakReference;

2.3资源消耗不多但仍然慢

主要原因是:锁竞争激烈,未充分使用硬件资源

JVM性能调优-G1

本篇是对Java官网G1收集器调优的精简版。针对G1垃圾的收集阶段可能出现的问题,非合理内存分配,大对象占用,Full GC等问题作出解决方式和操作参数。

G1是一个吞吐量和时间延迟之间相互平衡的收集器。目标是高吞吐量下提供相对较小、统一的暂停。
所以如果是交互性强的应用程序,使用G1时需要基于时延优先进行考虑。

虚拟机从操作系统内存中分配或归还内存可能会导致不必要的延迟。通过使用选项-Xms和-Xmx将最小和最大堆大小设置为相同的值,并使用 - XX:+AlwaysPreTouch 预触摸所有内存,以将这项工作移到VM启动阶段,从而避免延迟。

并行处理 Reference对象,ParallelRefProcEnabled默认值false,若 GC log 里出现 Reference 处理时间较长的日志,可以开启此参数- XX:+ParalleRefProcEnabled 。开启后会使用jvm可用的线程数进行处理,但官网上提到的-XX:ReferencesPerThread参数在jdk17的版本中没有找到,猜测可能是jvm内部控制不再作可调试的参数。

年轻代收集所花费的时间大致与年轻代的大小成正比。官网给出的两个参数- XX:G1NewSizePercent ,-XX: G1MaxNewSizePercent 在jdk17中没有找到,在没有固定年轻代大小时,G1会进行动态调整,所以这个调优的参考性不大,可以忽略。

减少老年代regions暂停时间

RS是一个抽象的数据结构,具体的实现由table card完成。一般会把记忆集和卡表放在一起讨论。简单来讲就是所有对象引用关系的一个集合,GCRoot时扫描的不是去实际的内存区域,否则跨代引用时从新生代到老年代会是一个漫长的过程。RS很好的解决了跨代引用的问题。由于RS会动态更新,垃圾收集必须先等RS更新完毕后才去执行。所以RS更新如果耗时过长则会影响回收时间。
RS的大小跟堆空间是成正比的。

扫描RS时间也由G1为保持低存储容量而执行的压缩量决定。记忆的集合存储在内存中越紧凑,在垃圾收集期间检索存储的值所花费的时间就越多。G1自动执行这种压缩,称为记忆集粗化,同时根据该区域记忆集的当前大小更新记忆集。特别是在最高压缩级别时,检索实际数据可能非常慢。
使用选项- XX:G1SummarizeRSetStatsPeriod 结合gc+remset=trace级别日志显示是否发生粗化。

解决方案

操作选项

java面试,问性能调优从哪些方面着手

简单点三个方向,数据库连接池,请求访问线程池,java本身也就是jvm优化,沿着这三个方向聊聊就可以了

关于本次java面试题jvm调优和jvm 性能调优工具之 jstat 命令详解的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

java面试题jvm调优(jvm 性能调优工具之 jstat 命令详解)

本文编辑:admin

更多文章:


怎么做网站网页归档(网页应该怎么做网页设计有哪些要求)

怎么做网站网页归档(网页应该怎么做网页设计有哪些要求)

大家好,怎么做网站网页归档相信很多的网友都不是很明白,包括网页应该怎么做网页设计有哪些要求也是一样,不过没有关系,接下来就来为大家分享关于怎么做网站网页归档和网页应该怎么做网页设计有哪些要求的一些知识点,大家可以关注收藏,免得下次来找不到哦

2026年10月11日 05:30

跷二郎腿太低好吗?想要通过贴墙站改正二郎腿影响的话,有哪些要点需要注意

跷二郎腿太低好吗?想要通过贴墙站改正二郎腿影响的话,有哪些要点需要注意

本篇文章给大家谈谈二郎腿贴地,以及跷二郎腿太低好吗对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年10月11日 05:10

易语言点击js按钮(易语言网页填表怎样点击链接为“javascript:void(0)“的按钮)

易语言点击js按钮(易语言网页填表怎样点击链接为“javascript:void(0)“的按钮)

本篇文章给大家谈谈易语言点击js按钮,以及易语言网页填表怎样点击链接为“javascript:void(0)“的按钮对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要

2026年10月11日 03:00

regards(Regards,什么意思)

regards(Regards,什么意思)

其实regards的问题并不复杂,但是又很多的朋友都不太了解Regards,什么意思,因此呢,今天小编就来为大家分享regards的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 01:10

dom4j文档(如何去掉用dom4j生成的XML文档中的)

dom4j文档(如何去掉用dom4j生成的XML文档中的)

其实dom4j文档的问题并不复杂,但是又很多的朋友都不太了解如何去掉用dom4j生成的XML文档中的,因此呢,今天小编就来为大家分享dom4j文档的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 01:00

compare with造句(用compared with和compared to造句)

compare with造句(用compared with和compared to造句)

“compare with造句”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看compare with造句(用compared with和compared to造句)!

2026年10月10日 23:30

xshell软件(Xshell怎么更改字体大小)

xshell软件(Xshell怎么更改字体大小)

各位老铁们好,相信很多人对xshell软件都不是特别的了解,因此呢,今天就来为大家分享下关于xshell软件以及Xshell怎么更改字体大小的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年10月10日 22:50

tensorflow与keras对应版本(为什么tensorflow2.8没有keras)

tensorflow与keras对应版本(为什么tensorflow2.8没有keras)

各位老铁们好,相信很多人对tensorflow与keras对应版本都不是特别的了解,因此呢,今天就来为大家分享下关于tensorflow与keras对应版本以及为什么tensorflow2.8没有keras的问题知识,还望可以帮助大家,解决

2026年10月10日 22:10

个人网站首页界面(深圳社会保险服务个人网页主页)

个人网站首页界面(深圳社会保险服务个人网页主页)

“个人网站首页界面”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看个人网站首页界面(深圳社会保险服务个人网页主页)!

2026年10月10日 22:00

maven仓库jar网站(如何在maven仓库中添加jar包)

maven仓库jar网站(如何在maven仓库中添加jar包)

这篇文章给大家聊聊关于maven仓库jar网站,以及如何在maven仓库中添加jar包对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年10月10日 19:50

最近更新

热门文章

by网站域名444(444ppp现在是什么域名)
2026-08-19 20:20:31 浏览:13
韩国大片视频mv(韩国20个感人mv)
2026-07-11 13:10:02 浏览:12
标签列表