程序员必备利器——Java程序性能分析工具Java VisualVM(Visual GC) 拼搏现实的明天。 2022-06-10 07:23 311阅读 0赞 ## 程序员必备利器——Java程序性能分析工具Java VisualVM(Visual GC) ## VisualVM 是一款免费的\\集成了多个JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 [ Java][Java] 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作。 在内存分析上,[Java ][Java]VisualVM的最大好处是可通过安装Visual GC插件来分析 **GC(Gabage Collection)**趋势、内存消耗详细状况。 ### **一、Visual GC(监控垃圾回收器)** ### [java ][Java]VisualVM默认没有安装Visual GC插件,需要手动安装,JDK的安装目录的bin目露下双击jvisualvm.exe,即可打开Java VisualVM,点击菜单栏 工具->插件 安装Visual GC ![这里写图片描述][SouthEast] ![这里写图片描述][SouthEast 1] 安装完成后重启Java VisualVM,Visual GC界面自动打开,即可看到JVM中堆内存的分代情况: ![这里写图片描述][SouthEast 2] 被监控的程序运行一段时间后Visual GC显示如下: ![这里写图片描述][SouthEast 3] 要看懂上面的图必须理解Java虚拟机的一些基本概念: 堆(Heap) :JVM管理的内存叫堆 分代:根据对象的生命周期长短,把堆分为3个代:Young,Old 和 Permanent,根据不同代的特点采用不同的收集[算法][Link 1],扬长避短也。 1. **Young(年轻代)**年轻代分三个区。一个 Eden 区,两个Survivor 区。大部分对象在 Eden 区中生成。当 Eden 区满时,还存活的对象将被复制到 Survivor 区(两个中的一个),当这个 Survivor 区满时,此区的存活对象将被复制到另外一个 Survivor 区,当这个 Survivor 去也满了的时候,从第一个 Survivor 区复制过来的并且此时还存活的对象,将被复制到 “年老区(Old)” 。需要注意,Survivor 的两个区是对称的,没先后关系,所以同一个区中可能同时存在从 Eden 复制过来对象,和从前一个 Survivor 复制过来的对象,而复制到年老区的只有从第一个 Survivor 复制过来的对象。而且,Survivor 区总有一个是空的。 2. **Old(年老代)**年老代存放从年轻代存活的对象。一般来说年老代存放的都是生命期较长的对象。如果 Old 区也满了,将会触发 Full GC ,回收整个堆内存。 3. **Perm(持久代)**用于存放的主要是类的 Class 对象。持久代对垃圾回收没有显著影响,但是有些应用可能动态生成或者调用一些 class,例如 Hibernate 等,在这种时候需要设置一个比较大的持久代空间来存放这些运行过程中新增的类。持久代大小通过 -XX:MaxPermSize= 进行设置。如果一个类被频繁的加载,也可能会导致 Perm 区满,Perm 区的垃圾回收也是由 Full GC 触发的。 **GC的基本概念** gc 分为 full gc 和 minor gc,当每一块区满的时候都会引发 gc。 * Scavenge GC 一般情况下,当新对象生成,并且在 Eden 申请空间失败时,就触发了 Scavenge GC,堆 Eden 区域进行 GC,清除非存活对象,并且把尚且存活的对象移动到 Survivor 区。然后整理 Survivor 的两个区。 * Full GC 对整个堆进行整理,包括 Young、Tenured 和 Perm。Full GC 比 Scavenge GC 要慢,因此应该尽可能减少 Full GC。有如下原因可能导致 Full GC: 上一次 GC 之后 Heap 的各域分配策略动态变化 * System.gc() 被显示调用 * Perm 域被写满 * Old 被写满 **内存溢出** out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。 **内存泄露** memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。**其实说白了就是该内存空间使用完毕之后未回收。** ### **二、 Java VisualVM的其他功能** ### 1.监视界面(cpu,类,堆,线程) ![这里写图片描述][SouthEast 4] 2.线程界面 ![这里写图片描述][SouthEast 5] 3.抽样器界面(性能剖析) 点击 CPU 按钮执行 cpu 分析查看方法 ![这里写图片描述][SouthEast 6] 点击内存按钮执行内存分析查看类 ![这里写图片描述][SouthEast 7] 4.堆dump和线程dump操作 Dump文件是进程的内存镜像,可以把程序的执行状态通过调试器保存到dump文件中。 堆dump的dump文件内容如下图所示: ![这里写图片描述][SouthEast 8] 线程dump的dump文件内容如下图所示: ![这里写图片描述][SouthEast 9] -------------------- 如果还有什么不清楚的地方,可以参考文章 [ 《使用 VisualVM 进行性能分析及调优》][_ VisualVM] 。 [Java]: http://lib.csdn.net/base/java [SouthEast]: /images/20220610/adc544b238dc4fc1aa2a1944e52da364.png [SouthEast 1]: /images/20220610/5b57e484c5504d80a540dee4ec8293f8.png [SouthEast 2]: /images/20220610/012f24874d4442d69d4b6279a0308f83.png [SouthEast 3]: /images/20220610/c84b478013ba4d8097216afec1e96b73.png [Link 1]: http://lib.csdn.net/base/datastructure [SouthEast 4]: /images/20220610/b0e3cc7f6e5c46948e66fd63b0fa4854.png [SouthEast 5]: /images/20220610/7d01035d8cab484bb408e810ae7ddea7.png [SouthEast 6]: /images/20220610/337ccf64288b47089304518cc6bc1da3.png [SouthEast 7]: /images/20220610/40ce60288daa48688317bac81ef16294.png [SouthEast 8]: /images/20220610/35cc32f995844b0a895ae2d43bc88386.png [SouthEast 9]: /images/20220610/a1d317320ae1440a85e0a78841f46667.png [_ VisualVM]: https://www.ibm.com/developerworks/cn/java/j-lo-visualvm/
相关 Java程序性能瓶颈分析:内存泄漏案例解析 在Java程序中,性能瓶颈和内存泄漏是两个重要的问题。下面我们将通过一个具体的案例来解析这两个问题。 案例:线程池中的内存泄漏 1. **性能瓶颈**: 在某些情况下 布满荆棘的人生/ 2024年09月21日 11:06/ 0 赞/ 5 阅读
相关 Java程序性能优化策略分析及实践示例 在Java编程中,提升程序性能主要从以下几个方面进行策略分析和实践: 1. **代码优化**: - 简化逻辑:避免嵌套循环、冗余条件判断。 - 使用高效数据结构: 待我称王封你为后i/ 2024年09月11日 16:39/ 0 赞/ 18 阅读
相关 Java程序员必备工具 . blog:csdn、博客园等 2. 分布式代码仓库:github、gitlab、码云等 3. 浏览器:火狐(AdBlocker、Cookie Quick Man... 悠悠/ 2024年04月18日 10:59/ 0 赞/ 31 阅读
相关 如何使用strace+pstack利器分析程序性能 如何使用strace+pstack利器分析程序性能 引言 有时我们需要对程序进行优化、减少程序响应时间。除了一段段地对代码进行时间复杂度分析,我们还有更便捷的方法 骑猪看日落/ 2022年08月09日 00:45/ 0 赞/ 146 阅读
相关 vtune性能分析工具--找出程序性能瓶颈 1. 概述 VTune是Intel一个比较强大的性能分析软件。主要包括三个小工具: (1)Performance Analyzer:性能分析,找到软件性能比较热的部分,一般 红太狼/ 2022年07月30日 20:51/ 0 赞/ 823 阅读
相关 程序员必备利器——Java程序性能分析工具Java VisualVM(Visual GC) 程序员必备利器——Java程序性能分析工具Java VisualVM(Visual GC) VisualVM 是一款免费的\\集成了多个JDK 命令行工具的可视化 拼搏现实的明天。/ 2022年06月10日 07:23/ 0 赞/ 312 阅读
相关 golang程序性能分析 最近在使用GraphQL编写golang程序,但GraphQL框架在golang上的实践比较少,很多性能上的资料也不够全面。考虑到线上抗压的问题,笔者决定对自己开发的服务模块进 红太狼/ 2022年05月26日 01:24/ 0 赞/ 215 阅读
相关 Go程序性能分析pprof 開啓分析,插入代碼 import ( "runtime/pprof" // 引用pprof package "os" 曾经终败给现在/ 2022年05月23日 09:55/ 0 赞/ 153 阅读
相关 [工具]FinalShell,必备终端利器 目录 主要特性 下载与安装 Windows版下载地址 macOS版下载地址 Linux版安装及教程 更新 我不是女神ヾ/ 2021年09月25日 02:48/ 0 赞/ 573 阅读
还没有评论,来说两句吧...