JVM调优及调优工具汇总,GC垃圾收集器总结

JVM 11 的优化指南:如何进行JVM调优,JVM调优参数有哪些 在实际的Java应用开发中,JVM(Java Virtual Machine)调优是提升应用性能的关键步骤。合理的调优可以显著提升应用的响应速度、吞吐量,并且减少内存消耗和GC(Garbage Collection)停顿时间。本文将详细介绍JVM 11的优化指南,包含如何进行JVM调优以及常见的JVM调优参数,并提供3个实用的代码示例。 阅读详情

最近朋友小B说想一份GC优化的资料内容,JVM内存分析以及性能调优的时候方便查询。可是文章太多根本看不过来,那么今天指北君就为大家带来这份,GC垃圾收集器总结及其优化指南,让你的JVM从此不再寂寞。文末更有惊喜。

1 垃圾收集器

1.1 Serial/Serial Old 收集器:

Serial 收集器作用于年轻代中, 采用 复制算法 , 属于串行回收方式

Serial Old 收集器 采用串行回收, STW机制, 采用 标记-压缩 算法 ,

"-XX:+UseSerialGC" 手动指定Serial收集器执行内存回收任务 

​ “-XX:+PrintGCDetails” 年轻代串行收集器的工作日志开关

1.2 ParNew 收集器

ParnNew 可以说是Serial收集器的多线程版本, ParNew 收集器在 年轻代 中同样才用的也是复制算法 和 STW 机制 并行回收机制。

ParnNew 收集器的优势体现在多CPU,多核心的环境中, 在某些注重低延迟的应用场景下ParNew 和 CMS 收集器的组合模式, 在Server 模式下的内存回收效果很好。

使用 “-XX:+UserParNewGC” 手动指定使用ParNew收集器 "

-XX:+UserParallelGC" 表示 年轻代使用并行垃圾回收器, 老年代使用串行收集器

1.3 Parallel/Parallel Old 收集器

Parallel收集器是并行回收 采用复制算法 年轻代 STW , 和ParNew不同Parrllel收集器可以控制程序的吞吐量大小 , 被称为-吞吐量优先的垃圾收集器.

Parallel Old采用标记整理算法,用于老年代的垃圾回收。

常用参数:

“-XX:+GCTimeRatio:N” 设置执行内存回收的时间所占JVM运行总时间的比例, 1/(1+N) 默认N为99

“-XX:+MaxGCPauseMills” 设置执行内存回收STW 的暂停时间阈值, 若指定该值,则尽可能地在设定的时间内完成内存回收。

“-XX:+UseAdaptiveSizePolicy” 选项用于设置GC的自动分代大小调节策略。

"-XX:UseParallelOldGC"可在年轻代和老年代都是用并行回收收集器, 此收集器重点关注吞吐量

“-XX:ParallelGCThreads” 可用于设置垃圾回收时的线程数量

Parallel Old 收集器采用了 标记-压缩算法 , 用于老年代垃圾回收 , 并行回收 STW

Parallel 和 Parallel Old 收集器的组合 在Server 模式下的内存回收性能较好。

1.4 CMS(Concurrent-Mark-Sweep) 收集器

基于低延迟的考虑 , 是并行垃圾回收器, 而且是老年代垃圾收集, 低延迟, 采用标记清除算法。会有短暂的STW

基本步骤如下 :

1. 初始标记(Initial Mark) : STW 标记根对象直接关联、可达的对象  
2. 并发标记(Concurrent Mark) :将不可达对象 标记为垃圾对象 
3. 再次标记(Remark) : STW 确保垃圾对象被成功且正确得标记  
4. 并发清除(Concurrent Sweep): 垃圾回收  
常用参数:

“-XX:+UseCMS-CompactAtFullCollection” 用于指定在执行完FullGC 之后 是否对内存空间进行压缩整理,

“-XX:+CMSFullGCs-BeforeCompaction” 设定在执行多少次FullGC 之后对内存空间进行压缩整理

“-XX:+CMSInitiatingOccupanyFraction” 设置老年代中的内存使用率达到多少百分比的时候执行内存回收 JDK1.6之前默认值为68% JDK1.6 之后默认92% , CMS垃圾收集器在回收过程中程依然可能会产生垃圾,所以需要设定一个阈值来进行垃圾回收,如果CMS回收失败,JVM则会启动老年代串行收集器进行垃圾回收,程序的STW时间会较长, 所以可以在内存增长缓慢的程序里面设置较大阈值,在内存增长快速的程序里面设置较小的阈值, 避免触发老年代串行收集器。

“-XX:UseConMarkSweepGC” 表示年轻代使用并行收集器,老年代使用CMS 年轻代 并行收集器工作时的线程数量可以使用 “-XX:ParallelGCThreads” 选项指定, 一般最好与CPU的数量相当.

1.5 G1(Garbage-First) 收集器

G1将整个堆划分为若干个大小相等的区间(1-32MB),Region类型分为Unused Region、Eden Region 和 Survivor Region组成了年轻代空间,Old Region, Humongous Region(里面的对象超过每个Region的50%),

每个Region都会有一个Region Set (RS),RS的数据结构是Hash表,里面的数据是CardTable (堆中没512Byte 映射在 card table 1 byte ) , 简单说 RS 里面存的是Region种存活对象的指针。 当Region中数据发生变化的时候 ,首先反映到Card Table 中的一个或者对个card上,RS通过扫面内部的Card Table 得知Region中内存使用情况和存活对象,在使用Region过程中,如果一个Region被填满了,分配内存的线程会重新选择一个新的Region,空闲Region被组织到一个基于链表的数据结构(LinkedList )中,这样可以快速找到Region.

G1 GC 可以分为 Young GC 和Mixed GC

年轻代GC:当年轻代达到一定的阈值,就开始年轻代的并发收集。将Eden Region中存活对象copy转移到Survivor的Region中,同时释放Eden Region 。 存活的时间够久就移到Old Reagion。

Mixed GC: 当Old Region占比达到一定的比例(通过 -XX:InitantingHeapOccupancyPercent 设置,默认45%)之后,会触发并行标记,然后就会进行Mixed GC。 Mixed GC 对一个叫做CSet的Region集合进行垃圾回收,其中包含了所有的年轻代Region和选取的一部分回收效益最好的Old Region。

并发标记的过程类似于CMS中的标记过程。

G1 可选优化参数
  1. 年轻代优化

    -XX:G1NewSizePercent Java 堆初始化大小 ,默认是整个Java堆大小的5%,

    -XX:G1MaxNewPercent 最大占用对内存的百分比,默认是60%

    -XX:MaxGCPauseMills 每次目标停顿时间, 默认200ms

可以根据上述三个参数的调整来优化年轻代的垃圾回收

  1. 并行标记阶段优化

    并行标记阶段, -XX:InitantingHeapOccupancyPercent 决定了什么时候初始化并行标记循环 默认值45%

    -XX:ConcGCThreads 并发GC数量, 是-XX:ParallelGCThreads 的1/4 ,可以通过修改两个值来改变并线程的数量。

  2. 混合回收阶段优化

-XX:+PrintAdaptiveSizePoliy 开启后会输出完成的GC生态日志,

-XX:G1HeapWastePercent 表示最大可忍受的垃圾总量,默认是堆空间的5%,如果Mixed GC占用的时间过多,可以将此值调整大一点。

-XX:G1MixedGCCountTarget 默认为8,表示Mixed GC过程中入选的Old Region的最小阈值,用于控制入选的Old Region的数量

-XX:G1OldCSetRegionThresholdPercent 默认值100% ,表示加入到CSet中的Old Region的最大数量。

-XX:G1MixedGCLiveThresholdPercent 默认值 85% ,表示设置的每CSet中每个区间最多存活对象的百分比。

2 JVM的一些常用参数
  1. -XX:+PrintGCDetails 用于记录GC运行时的详细信息并输出。
  2. -verbose:gc -Xloggc:gc.log 结合前一个选项可以在项目根目录下生成gc.log文件记录gc详细信息
  3. -XX:+UseSerialGC 使用串行gc收集器,使用与小于100MB的内存空间场景
  4. -XX:+UserParNewGC 独占式GC , 多线程GC (未来不可用)
  5. -XX:+UseParallelGC
  6. -XX:+UseParallelOldGC
  7. -XX:+UseConcMarkSweepGC
  8. -XX:+UseG1GC
  9. -XX:+PrintGCApplicationStoppedTime 输出GC造成应用程序暂停的时间
  10. -XX:+PrintGCApplicationConcurrentTime 与上面参数结合使用
  11. -XX:+ConcGCThreads=4 设置Java应用程序线程并行执行的GC线程数量 若设置的值超过JVM允许GC并行线程的数量则报错, 默认的并行标记线程数量计算如下 ConGCThreads = Max((ParallelGCThreads#+2)/4,1)
  12. -XX:G1HeapRegionSize G1 GC 独有,Region大小默认为堆的1/2000 也可以设置 1MB 2MB 4MB 8MB 16MB 32MB 等6个档次
  13. -XX:G1HeapWastePercent=5 控制G1GC 不会回收的空闲内存比例,默认是堆内存的5% G1 GC在回收过程中会回收所有Region的内存,并持续地进行回收工作,直到内存空闲比例达到次值
  14. -XX:G1MixedGCCountTarget=8 老年代Region 的回收时间通常来说比年轻带Region回收时间长,此选项设置并行循环之后启动多少个混合GC 默认值是 8个 设置一个比较大的值可以让G1 GC在老年代Region回收时多花一些时间,如果一个混合GC停顿的时间很长,说明它要做的使很多,所以可以增大这个值的设置,但这个值过大的话,会造成并行循环等待混合GC完成的时间也相应的增加。
  15. -XX:G1PrintRegionLivenessInfo 开启这个选项会在标记循环之后输出详细信息(诊断选项) 在使用之前需要开启-XX:UnlockDiagnosticVMOptions 选项, 此选项会打印内存内部每个Region里面存活的对象信息, 包括使用率 RSET大小、回收一个Region的价值(性价比) 15. -XX:G1ReservePercent=10 此选项默认保留对内存的10%,用于某个对象进入下一个阶段,预留内存空间不可用于年轻带
  16. -XX:+G1SummarizeRSetStats 打印每个Region的详细信息。 此选项和-XX:G1PrintRegionLivenessInfo选项一样,是一个诊断选项也需要开启 -XX:UnlockDiagnosticVMOptions 选项 。
  17. -XX:+G1TraceConcRefinement 诊断选项,启动这个选项,并行Refinement线程相关的信息会被打印,线程启动和结束时,信息都会被打印。
  18. -XX:G1UseAdaptiveConcRefinement 默认开启的选项, 它会动态地对每一次GC中-XX:G1ConcRefinementGreenZone、-XX:G1ConcRfinementYellowZone、-XX:-XX:G1ConcRfinementRedZone,的值进行重新计算 并行Refinement线程是持续运行的,并且会随着update log buffer 积累的数量而动态调节, -XX:G1ConcRefinementGreenZone、-XX:G1ConcRfinementYellowZone、-XX:-XX:G1ConcRfinementRedZone,三个选项是用来根据不同的buffer使用不同的Refinement线程,其作用就是保证Refinement线程尽可能更上update log buffer生产的的步伐
  19. -XX:GCTimeRatio=9 这个选项代表Java应用程序话费时间与GC线程花费时间的比率, 1/(1+GCTimeRatio) 默认值是9 表示花费在GC工作量上的时间占总时间的10%
  20. -XX:+HeapDumpBeforeFullGC/-XX:+HeapDumpAfterFullGC 启用此选项 , 在Full GC开始之前有一个hprof文件会被创建, 两个选项同时使用,可以对比Full GC前后的java堆内存,找出内存泄漏以及其他问题,
  21. -XX:InitiatingHeapOccypancyPercent=45 该选项默认值是45 表示G1 GC并行循环初始设置的堆大小值, 这个值决定了一个并行循环是不是要开始执行, 它的逻辑是在一次GC完成后,标胶老年代占用的空间和整个Java堆之间的比例,如果大于这个值,则预约下一次GC开始一个并行循环回收垃圾,从初始标记阶段开始。 这个值越小,GC 越频繁,反之 值越大,
  22. -XX:UseStringDeduplication 该选项启动String对象的去重工作,默认不启用。 如果启用该选项 String1.equals(String2) 如果两个对象包含相同的内容则返回true
  23. -XX:StringDeduplicationAgeThreshold=3 针对-XX:UseStringDeduplication选项,默认值为3 字符串对象的年龄超过设定的阈值,或者提升到G1 GC老年代Region之后,就会成为字符串去重的候选对象,去重操作只会有一次。
  24. -XX:PrintStringDeduplicationStatistics 可以通过读取输出的统计资料来了解是否字符串去重后节约了大量的堆内存空间,默认关闭
  25. -XX:+G1UseAdaptiveHOP JDK9的新选项 默认启用,通过动态调节标记阶段开始的时间,以达到提升应用程序吞吐量的目标, 主要通过尽可能迟地触发标记循环方式来避免消耗老年代空间,
  26. -XX:MaxGCPauseMills=200 【重要选项】设置G1的目标停顿时间 ,单位为ms 默认值为200ms
  27. -XX:MinHeapFreeRatio=40 设置对内可以空闲的最小的内存空间大小,默认为堆内存的40% 当空闲堆内存大小小于此值的时候,需要判断-Xms 和 -Xmx 两个初始化设置值,如果-Xms 和 -Xmx 不一样,那么就有机会扩展堆内存,否则就无法扩展。
  28. -X:MaxHeapFreeRatio =70 这只最大空闲空间大小,默认为堆内存的70%,当大于这个空闲比率的时候 G1 GC 会自动减少对内存的大小, 需要判断-Xms 和 -Xmx的大小 如果两者一样则有机会减小堆内存,否则无法减小堆内存
  29. -XX:+PrintAdaptiveSizePolicy 这个选项决定是否开启堆内存大小变化的相应记录信息打印, 是否打印这些星系到GC日志里面
  30. -XX:+ResizePLAB GC使用的本地线程分配缓存块采用动态值还是静态值 默认开启 31. -XX:+ResizeTLAB Java线程使用的本地线程分配缓存块采用 动态值还是静态值。 默认开启
  31. -XX:+ClassUnloadingWithCncurrent 开启G1 GC在并行循环卸载类,尤其是在老年代的并行回收阶段,默认是开启的。 这个选项开启后会在并行循环的重标记阶段卸载JVM没有用到的类, 这些工作也可以放到Full GC 里面去做。是否开启此选项要看性价比。 如果GC停顿时间比我们设置的最大GC停顿目标时间还长,并且需要卸载的类也不多,建议关闭此选项
  32. -XX:+ClassUnloading 默认是是True 决定JVM是否会卸载无用的类,如果关闭此选项,无论是并行回收循环还是Full GC 都不会再卸载这些类,所以需要谨慎关闭
  33. -XX:+UnloadingDiagnosticVMOptions 是否开启诊断选项,默认值是 False
  34. -XX:+UnlockExperimentalVMOptions 默认关闭
  35. -XX:+UnlockCommercialFeatures 是都使用Oracle特有特性, 默认关闭

3 JVM常用调优分析工具

JVM内存分析调优,如果能多多利用调优的一些工具,那将会事半功倍。那么指北君问大家介绍比较好用的一些调优工具,包括Java自带的和第三方的一些好用工具。

jps

JVM Process Status Tool,查询当前运行状态的Java 进程

语法格式

jps [<options>]

具体 [options]选项:
-q:仅输出VM标识列表;
-m:输出main方法的参数,输出可能为null;
-l:输出完整的包名,应用main calss,jar的完全路径名;
-v:输出JVM参数 ;
-V:输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件 ;

jinfo

JVM Configuration info ,查询Java进程运行时的详细信息以及JVM的参数详细信息

命令格式

jinfo [ option ] pid
jinfo [ option ] executable core
jinfo [ option ] [server-id@]remote-hostname-or-IP 

具体 [options]选项:

-flag name : prints the name and value of the given command line flag.

-flag [+|-]name : enables or disables the given boolean command line flag.

-flag name=value : sets the given command line flag to the specified value.

-flags prints : command line flags passed to the JVM. pairs.

-sysprops :prints Java System properties as name, value pairs.

示例:

bin>jinfo -flags 17876
VM Flags:
-XX:CICompilerCount=2 -XX:ConcGCThreads=1 -XX:ErrorFile=C:\Users\Michael\java_error_in_idea64_%p.log -XX:G1ConcRefinementThreads=4...
bin>jinfo -flag InitialHeapSize 17876
-XX:InitialHeapSize=134217728
jstat

JVM Statistics Monitoring Tool 可查看JVM的性能统计信息,能显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。可参考官网详情:https://docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html

命令格式

jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]

generalOption 通用命令行参数,

outputOptions 一个过多个输出选项,

vmid 虚拟机定位标识,确定虚拟机运行的机器端口等

interval 查询并显示信息的时间间隔

count 需要查询信息的数量

关于jstat的参数选项有如:

OptionDisplays…
classStatistics on the behavior of the class loader.
compilerStatistics of the behavior of the HotSpot Just-in-Time compiler.
gcStatistics of the behavior of the garbage collected heap.
gccapacityStatistics of the capacities of the generations and their corresponding spaces.
gccauseSummary of garbage collection statistics (same as -gcutil), with the cause of the last and current (if applicable) garbage collection events.
gcnewStatistics of the behavior of the new generation.
gcnewcapacityStatistics of the sizes of the new generations and its corresponding spaces.
gcoldStatistics of the behavior of the old and permanent generations.
gcoldcapacityStatistics of the sizes of the old generation.
gcpermcapacityStatistics of the sizes of the permanent generation.
gcutilSummary of garbage collection statistics.
printcompilationHotSpot compilation method statistics.

示例:

bin>jstat -gcoldcapacity -t 17876 250 3
Timestamp          OGCMN        OGCMX         OGC           OC       YGC    FGC    FGCT     CGC    CGCT       GCT
         6378.7          0.0    1042432.0     505856.0     505856.0    310     0     0.000   134     3.033     7.305
         6379.0          0.0    1042432.0     505856.0     505856.0    310     0     0.000   134     3.033     7.305
         6379.3          0.0    1042432.0     505856.0     505856.0    310     0     0.000   134     3.033     7.305
jmap

JVM Memory Map 输出对象内存信息,Java堆信息等

命令格式

jmap [ option ] pid
jmap [ option ] executable core
jmap [ option ] [server-id@]remote-hostname-or-IP

options选项

-dump:[live,]format=b,file= 将Java堆生成dump文件,

-finalizerinfo 输出等待执行finalizer方法的对象

-heap 输出堆的详细信息,GC算法,堆参数等等

-histo[:live] 输出堆的统计信息,包括Java类,对象数量,内存size等

-permstat Prints class loader wise statistics of permanent generation of Java heap

-F 强制生成dump,与jmap -dump / jmap -histo 等一起使用,如果进程id没有响应则强制生成dump文件

示例:

bin>jmap -finalizerinfo 17876
No instances waiting for finalization found

生成Java 堆dump文件

bin>jmap -dump:format=b,file=E:/Java/heap/17876.hprof 17876
Heap dump file created
jstack

主要输出 Java线程的堆栈信息

jstack [options] pid

示例:

bin>jstack -l 17876
JConsole

JConsole 是Java自带的可视化程序,可以监控一些内存线程等信息,使用也比较方便。

VisualVM

VisualVM在在Java8之后就被从JDK中拿走,如果想使用可以去VisualVM官网(文末贴出下载地址)下载,它有标准版和基于GraalVM的版本,同时还有IDEA的插件用起来也比较方便。我们下载标准版VisualVM2.07先看一下。还是熟悉的味道。

Memory Analyzer (MAT)

Eclipse 出品的一款Java堆内存分析程序,可以帮助我们找到内存泄漏和减少内存消耗。可在其官网下载,文末贴出下载地址

在这里插入图片描述

总结

本篇总结了一些常用GC的垃圾回收流程,GC调优可以参考的一些参数。另外还介绍了一些分析Java性能的一下Java命令及可视化分析工具,在实际生产环境使用的话肯定会比所介绍的还要复杂,所以看官们还不快快动起手来操练一下。让你的JVM不再寂寞。由于每一个工具的详细使用都需要大篇幅,那么指北君后面将会为大家一一带来这些工具如何进行JVM性能调优。敬请期待!

后记

VisualVM 官网 :https://visualvm.github.io/

GraalVM 官网 : https://www.graalvm.org/

Memory Analyzer (MAT) 下载 官网: https://www.eclipse.org/mat/downloads.php (选择国内中科大的镜像,下载会快许多)

最近又赶上跳槽的高峰期,好多粉丝,都问我要有没有最新面试题,我连日加班好多天,终于整理好了,16000+ 道,295多份,多份面试题大全,我会持续更新中,马上就会整理更多!

微信搜索 【Java技术指北】回复【面试题】即可获取

JVM 17 的优化指南:如何进行JVM调优,JVM调优参数有哪些 这篇文章将详细介绍如何进行JVM 17调优,包括JVM 17调优参数及其应用。此外,我将提供12个实用的代码示例,每个示例都会结合和Java代码。本文已收录于,我的技术网站,有大厂完整,工作技术,架构师成长之路,等经验分享在Java开发中,JVM调优是提升应用性能的关键步骤。JVM 17作为最新的LTS版本,带来了许多新特性和改进。本文将详细介绍JVM 17的优化指南,包括如何进行JVM调优以及常见的JVM调优参数,并提供3个实用的代码示例。 阅读详情

相关推荐

jvm调优步骤

jvm调优 JVM调优的一般步骤为: 第1步:分析GC日志及dump文件,判断是否需要优化,确定瓶颈问题点; 第2步:确定JVM调优量化目标; 第3步:确定JVM调优参数(根据历史JVM参数来调整); 第4步:调优一台服务器,对比观察调优前后的差异; 第5步:不断的分析和调整,直到找到合适的JVM参数配置; 第6步:找到最合适的参数,将这些参数应用到所有服务器,并进行后续跟踪。 -XX 参数被称为不稳定参数,之所以这么叫是因为此类参数的设置很容易引起JVM 性能上的差异,使JVM 存在极大的不稳定性。

星月IWJ 6033

JVM故障处理工具

JVN故障处理工具 jps(JVM Process Status Tool) 虚拟机进程状况工具 功能: 列出正在运行的虚拟机进程,并显示虚拟机执行主类名称,和这些进程的本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier)。 使用方法: jps [options] [hostid] , options 表示不同的参数,根据需要的信息选择不同的参数;hostid 表示远程查看。 options 信息描述 -q 只输出进程 ID即LVMID,忽略主

weixin_41517531的博客 519

JVM调优:选择合适的GC collector (一)

<br />正文之前,先介绍一人:Jon Masamitsu。此人背景不详,不过他在SUN做的就是JVM,所以他的blog我认为是每一个想对JVM调优的人都应该读一读的。本文的很多观点和一些图也是取自他的blog。<br /> blog link:http://blogs.sun.com/jonthecollector/ <br /><br /> 在他的一篇blog【1】中,写到了GC调优的最重要的三个选项:<br /> 排在第三位的是young generation在整个JVM heap中所占的比重

智障大师 的专栏 2万+

JVM 相关的命令行指令,诊断 JVM 的相关图形化工具

本文介绍了GC相关的常用的命令行指令以及查看GC的图形化工具。GC相关的命令行指令有:jmap,jstat,jstack,jcmd。本文介绍的图形化工具有:jconsole,jvisualvm,visual GC以及jmc,其中jmc的功能最为强大,分析也比较全面。

ZhaoSimonone的博客 629

基于C#的软PLC梯形图编辑器开发实战

本文详细介绍了基于C#开发软PLC梯形图编辑器的实战过程。文章从核心数据结构设计入手,阐述了如何利用C#的面向对象特性构建梯形图元素模型,并实现了图形编辑、指令表输入、逻辑连接拓扑重建等关键功能。重点剖析了模拟PLC执行引擎的扫描周期与能流传递算法,让梯形图逻辑在PC上“活”起来。最后探讨了定时器指令实现、性能优化及项目集成等进阶内容,为工业自动化软件集成提供了灵活高效的解决方案。

weixin_28314575的博客 404

CentOS8静默安装Oracle11.2.0.1

背景 新安装oracle,用静默安装方式就不需要安装图形界面了,省时省力。 前期准备工作与图形化安装一样,如创建用户|用户组、环境变量、内核参数、创建目录等. 可参考图形化安装,链接:https://blog.youkuaiyun.com/heroicpoem/article/details/104229369 环境 平台 版本 操作系统 centOS 8 Oracle 11gR2 1.响应文件 响应文件的内容就是图形化安装时手工设置的选项内容。 解压后,database/response/db

heroicpoem的专栏 4518

JVM:性能监控工具分析和线上问题排查实践

在日常开发过程中,多少都会碰到一些jvm相关的问题,比如:内存溢出、内存泄漏、cpu利用率飙升到100%、线程死锁、应用异常宕机等。 在这个日益内卷的环境,如何运用好工具分析jvm问题,成为每个java攻城狮必备的技能。所以白梦特意整理了jdk自带分析工具的使用,以及常见的jvm问题分析和处理。

weixin_38225800的博客 1342

智能车竞赛环岛处理全解析:从图像识别到状态机控制

在嵌入式系统与自动控制领域,状态机是管理复杂系统行为、实现清晰逻辑流的核心设计模式。其原理在于定义一组有限的状态,以及触发状态迁移的事件和条件,从而将连续、模糊的过程分解为离散、确定的阶段。这种技术在机器人导航、工业自动化等场景中价值显著,尤其适用于需要应对多种场景、做出序列化决策的场合。在智能车竞赛中,赛道元素识别与路径跟踪是典型应用,其中环岛作为连续闭环的复杂场景,对系统的鲁棒性和决策连贯性提出了更高要求。通过图像处理提取赛道边线、宽度和曲率等特征,结合陀螺仪等传感器数据,可以构建一个专门处理环岛的状态

weixin_34033624的博客 561

JVM性能监控与调优:实战指南

在之前的文章中,我们已经探讨了JVM的内部机制和内存管理。现在,让我们将注意力转向JVM性能监控与调优的实战操作。本文将详细介绍几个关键的JVM监控和调优命令,并通过示例代码展示它们的使用方法,以及如何解读查询结果。

boydoy1987的专栏 1094

告别环境报错:用Pycharm一站式搞定Superset 3.0.0二次开发环境(Windows/Mac通用)

本文详细介绍了如何使用Pycharm一站式搭建Apache Superset 3.0.0的二次开发环境,涵盖Windows和Mac平台。通过虚拟环境配置、依赖管理、数据库初始化及前后端协同开发等步骤,帮助开发者高效解决环境报错问题,提升开发效率。特别适合需要进行Superset二次开发的工程师参考。

weixin_42549496的博客 316

11n、11ac、11ax和11be MCS表(全网最全)

1、无线协商速率介绍及计算 2、附11n、11ac、11ax 完整MCS速率表

weixin_41500064的博客 2万+

java-JDK11“ jstat -gc”中“ CGC”和“ CGCT”是什么意思?

有两个项目,分别称为CGC和CGCT.我找不到描述其含义的文档和手册页. # jstat -gc 139934 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT CGC C...

weixin_44109689的博客 6485

OpenClaw-遇到的问题- FailoverError: Model context window too small (4096 tokens). Minimum is 16000

摘要:OpenClaw配置文件中deepseek-reasoner模型的上下文窗口被默认设置为4096 tokens(实际支持128K),导致系统报错"Model context window too small"。解决方案是删除配置文件中的contextWindow和maxTokens字段,让系统自动获取模型真实能力,并重启OpenClaw服务。配置文件通常位于用户目录下的.openclaw/openclaw.json中。

直到世界的尽头 4163

jvm调优

一、jvm内存调优 主要的目的是减小GC的频率和Full GC的次数。 1.Full GC 会对整个堆进行整理,包括Young、Tenured和Perm。Full GC由于须要对整个堆进行回收,因此比较慢,所以应该尽量减小Full GC的次数。数组 2.致使Full GC的缘由缓存 1)年老代(Tenured)被写满服务器 调优时尽可能让对象在新生代GC时被回收、让对象在新生代多存活一段时间和不要建立过大的对象及数组避免直接在旧生代建立对象 。并发 2)持久代Pemanet Generation空间不

白大锅的博客,毕设WangLoveBai_999 12万+

USB_TYPE-C 母座电路设计

本文详细介绍了USB Type-C接口(C2765186)的电路设计要点,重点解析了电源、识别和数据三部分的关键连接方案。电源部分需并联VBUS和GND引脚并加宽走线以承载3A电流;识别部分必须为CC1/CC2引脚配置5.1kΩ±1%精度的下拉电阻,这是触发PD充电的核心条件;数据部分通过短接正反插引脚实现盲插功能。文档还提供了完整的引脚对照表,并强调PCB布局需注意ESD防护、差分走线阻抗控制等要点,为Type-C接口设计提供了实用指导。

在读研究生,FPGA电路设计与功能开发。 586

46、聚类算法在智能交通数据分析中的应用

本文探讨了聚类算法在智能交通数据分析中的应用,介绍了K-均值算法、K-中心点算法和基于模型的聚类算法的基本原理及特点,并结合实际交通数据讨论了其应用场景与挑战。通过聚类分析,能够从海量交通数据中发现隐藏模式,为交通管理和规划提供科学依据。文章还展示了具体的案例分析和实现流程,为未来智能交通系统的发展提供了参考。

zz67890的博客 133

JVM调优实践:记录初次JVM调优经历

JVM调优实践:记录初次JVM调优经历前言JVM调优工具参考文章初步调优基本指令选择垃圾收集器初步确定堆大小 前言 之前关于 JVM 调优大部分都只是一些理论依据,具体经验没有,这回正好记录下。 中间一些碰壁与返工的部分就跳过了。 JVM调优工具 jps: 用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。 jinfo: 可以根据进程号输出并修改运行时的java 进程的opts。 jstat: 一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大

乐之终曲 2285

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JVM性能调优——GC日志分析

生成GC日志、Parallel垃圾收集器日志解析、G1垃圾收集器日志解析、CMS垃圾收集器日志解析、日志解析工具

码说芯语的博客 6032

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

JAVA8调优指南:如何进行JVM调优、JVM参数

JAVA8调优

升仔聊编程的博客 2085

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【JVM实战】JVM参数调优

文章目录JVM参数调优一、调优基本概念二、常用JVM参数三、GC调优思路 JVM参数调优 一、调优基本概念 在调整性能时,JM有三个组件 堆大小调整 垃圾收集器调整 JIT编译器调整 大多数调优选项都与调整堆大小和选择的垃圾收集器有关。 同样,JIT编译器对性能也有很大影响,但是这个对程序员自身要求非常高。 通常,在调优Java应用程序时,重点是以下两个主要目标之一: 响应性:应用程序或系统...

明月沉江春雾晓 8218

GC如何调优?

写在前面 本文隶属于专栏《100个问题搞定Java虚拟机》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和文献引用请见100个问题搞定Java虚拟机 解答 谈到调优,这一定是针对特定场景、特定目的的事情, 对于 GC 调优来说,首先就需要清楚调优的目标是什么? 从性能的角度看,通常关注三个方面,内存占用(footprint)、延时(latency)和吞吐量(throughput),大多数情况下调优会侧重于其中一个或者两个方面的目标,很少有情况可以兼顾三个不同

Shockang的博客 1万+

JVM调优及举例

参数功能-Xms和-Xmx设置初始和最大堆大小新生代与老年代的比例Eden区与Survivor区的比例启用G1垃圾收集器G1的最大GC暂停时间目标输出详细GC日志OOM时生成内存转储文件通过以上案例和参数配置,结合实际业务特点,可以针对性地优化JVM性能。需要注意的是,调优是一个持续的过程,应结合监控数据不断调整。Full GC频繁通常是内存管理的信号灯,分析GC日志和应用行为是定位问题的关键。根据具体场景调整堆内存、GC策略和代码逻辑,能有效降低Full GC的发生频率。

itsniu的博客 2593

JVM 11 调优指南:如何进行JVM调优,JVM调优参数

JVM调优是通过调整Java虚拟机的配置参数来提升应用程序的性能和资源利用效率的过程。这包括调整堆内存大小、选择合适的垃圾收集器,以及调整其他性能相关的参数。合理的JVM调优可以显著提升应用的性能和稳定性。不过,请记得调优是一个持续的过程,需要根据应用的具体表现来不断调整和优化。本文已收录于,我的技术网站ddkk.com,有大厂完整面经,工作技术,架构师成长之路,等经验分享。

架构师专栏 2490

Java基础 | JVM 调优

Java基础 | JVM 调优

qq_20236937的博客 2615

如何进行JVM的调优

进行Java虚拟机(JVM)的调优是一项关键的工作,旨在优化JVM的性能,提高应用程序的响应速度和吞吐量,并确保系统的稳定运行。JVM调优通常涉及到调整堆大小、选择合适的垃圾收集器、监控运行时性能以及分析内存泄漏等方面。

www_tlj的专栏 2550

JVM调优-调优原则与思路

一、实施过程中的原则 在调优之前,我们需要记住下面的原则: 1、在应用上线之前,先考虑将机器的JVM参数设置到最优(最适合)。 2、多数导致GC问题的Java应用,都不是因为我们参数设置错误,而是代码问题。同时多数的Java应用不需要在服务器上进行GC优化。 3、减少使用全局变量和大对象,同时注意减少创建对象的数量;这也是Spring框架单例模式的一个优点。 4、在实际使用中,分析GC情况优化代码比优化GC参数要多得多,GC优化往往是最后的手段; ...

Simon111Qiu的博客 4145
上一篇: ZGC调优,亚毫秒级延迟GC,垃圾收集器
下一篇: GC垃圾收集器&JVM调优汇总
JavaTechNorth
博客等级 码龄5年 36粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值