Java程序性能分析工具Java VisualVM(Visual GC)—程序员必备利器

VisualVM 是一款免费的\集成了多个JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作。

在内存分析上,Java VisualVM的最大好处是可通过安装Visual GC插件来分析GC(Gabage Collection)趋势、内存消耗详细状况。

一  Visual GC(监控垃圾回收器)

Java VisualVM默认没有安装Visual GC插件,需要手动安装JDK的安装目录的bin目露下双击jvisualvm.exe,即可打开Java VisualVM,点击菜单栏 工具->插件 安装Visual GC

安装完成后重启Java VisualVM,Visual GC界面自动打开,即可看到JVM中堆内存的分代情况

被监控的程序运行一段时间后Visual GC显示如下

要看懂上面的图必须理解Java虚拟机的一些基本概念:

堆(Heap) :JVM管理的内存叫堆

分代:根据对象的生命周期长短,把堆分为3个代:Young,Old和Permanent,根据不同代的特点采用不同的收集算法,扬长避短也。

  1. Young(年轻代)
    年轻代分三个区。一个Eden区,两个Survivor区。大部分对象在Eden区中生成。当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当这个Survivor区满时,此区的存活对象将被复制到另外一个Survivor区,当这个Survivor去也满了的时候,从第一个Survivor区复制过来的并且此时还存活的对象,将被复制“年老区(Tenured)”。需要注意,Survivor的两个区是对称的,没先后关系,所以同一个区中可能同时存在从Eden复制过来对象,和从前一个Survivor复制过来的对象,而复制到年老区的只有从第一个Survivor复制过来的对象。而且,Survivor区总有一个是空的。
  2. Tenured(年老代)
    年老代存放从年轻代存活的对象。一般来说年老代存放的都是生命期较长的对象。
  3. Perm(持久代)
    用于存放静态文件,如今Java类、方法等。持久代对垃圾回收没有显著影响,但是有些应用可能动态生成或者调用一些class,例如Hibernate等,在这种时候需要设置一个比较大的持久代空间来存放这些运行过程中新增的类。持久代大小通过-XX:MaxPermSize=进行设置。

GC的基本概念

gc分为full gc 跟 minor gc,当每一块区满的时候都会引发gc。

  1. Scavenge GC
    一般情况下,当新对象生成,并且在Eden申请空间失败时,就触发了Scavenge
    GC,堆Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor区。然后整理Survivor的两个区。
  2. Full GC
    对整个堆进行整理,包括Young、Tenured和Perm。Full GC比Scavenge
    GC要慢,因此应该尽可能减少Full GC。有如下原因可能导致Full GC:
  • 上一次GC之后Heap的各域分配策略动态变化
  • System.gc()被显示调用
  • Perm域被写满
  • Tenured被写满


内存溢出  out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。

内存泄露  memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。其实说白了就是该内存空间使用完毕之后未回收。

二 Java VisualVM的其他功能

1.监视界面(cpu,类,堆,线程)



2.线程界面


3.Profile界面(性能剖析)

点击CPU按钮执行cpu分析查看方法

点击内存按钮执行内存分析查看类


4.堆dump线程dump操作

Dump文件是进程的内存镜像,可以把程序的执行状态通过调试器保存到dump文件中,堆dump的dump文件内容如下图所示

时间: 2024-10-03 08:27:04

Java程序性能分析工具Java VisualVM(Visual GC)—程序员必备利器的相关文章

Java程序员必备的 15框开发工具

15款Java程序员必备的开发工具 如果你是一名Web开发人员,那么用膝盖想也知道你的职业生涯大部分将使用Java而度过.这是一款商业级的编程语言,我们没有办法不接触它. 对于Java,有两种截然不同的观点:一种认为Java是最简单功能最强大的编程语言之一,另一种则表示这种编程语言既难用又复杂. 下面这些工具或许功能和作用不同,但是有着一个共同的主旨,那就是——它们都是为了给Java编码和开发提供卓越的支持. 1. JDK(Java开发工具包) 如果你打算用Java开发一些小程序和应用程序,那么

Java 程序员必备的 15 个框架,前 3 个地位无可动摇!

Java 程序员方向太多,且不说移动开发.大数据.区块链.人工智能这些,大部分 Java 程序员都是 Java Web/后端开发.那作为一名 Java Web 开发程序员必须需要熟悉哪些框架呢? 今天,栈长我给大家列举了一些通用的.必须掌握的框架,学会这些,20K+ 不是问题. 1.Spring 毫无疑问,Spring 框架现在是 Java 后端框架家族里面最强大的一个,其拥有 IOC 和 AOP 两大利器,大大简化了软件开发复杂性.并且,Spring 现在能与所有主流开发框架集成,可谓是一个万

Java程序员必备的15个框架,学会这些20K+ 不是问题

Java 程序员方向太多,且不说移动开发.大数据.区块链.人工智能这些,大部分 Java 程序员都是 Java Web/后端开发.那作为一名 Java Web 开发程序员必须需要熟悉哪些框架呢? 今天,给大家列举了一些通用的.必须掌握的框架,学会这些,20K+ 不是问题. 1.Spring 毫无疑问,Spring 框架现在是 Java 后端框架家族里面最强大的一个,其拥有 IOC 和 AOP 两大利器,大大简化了软件开发复杂性.并且,Spring 现在能与所有主流开发框架集成,可谓是一个万能框架

11个代码质量审核和管理工具,程序员必备!

如今,代码质量分析和审核已成为每个企业的基本流程.随着开源代码库使用的增加,安全性和代码质量对于构建高质量软件至关重要.不良的代码不仅会影响代码的可维护性,而且还会在某些情况下影响其性能.此外,更好的代码质量还有助于企业将来减少维护和降低成本.幸运的是,有很多审核和管理代码的工具,为开发者和程序员提供了发现代码问题的解决方案. 1.SonarQube SonarQube是市场上最受欢迎的代码质量和安全性分析工具.它在开源社区的支持下,目前可以分析和产生对超过25种编程语言的输出,这比市场上大多数

程序员必备简捷开发辅助工具总结

程序员必备简捷开发辅助工具总结 本文独家授权给stormzhang运营的公众号AndroidDeveloper,拒绝其他任何形式的转载. 写在前面: 工欲善其事必先利其器,拥有简捷的开发辅助工具能大大提高我们程序猿的开发效率.Melo刚到学校就给大家总结了一些常用的辅助开发的工具,希望大家能喜欢,闲话不多说,马上开始~! 零:Notepad++ Notepad++ 程序员必备的文本编辑器,软件小巧高效,支持27种编程语言,通吃C,C++ ,Java ,C#, XML, HTML, PHP,JS

第3本:Visual Studio程序员箴言

Visual Studio 2010是我经常使用的程序开发工具,也知道VS中有大量的快捷键可以帮助提高效率,可惜就是不愿意记忆,最近在学vim的时候快速把<Visual Studio程序员箴言>这本书看了一遍,发现有些技巧对于提高编程效率还是非常有帮助的. 我在学习vim的时候把现在的Visual Studio 2010安装了viemu,vim非常强大,自带的命令就可以完成许多强大的功能,所以我挑选的技巧一定要与viemu兼容的,并且是使用频率较高的. 技巧1.2 循环粘贴 Ctrl-Shif

程序员必备的开发和测试工具汇总

网络监测服务诞生于互联网井喷年代,对于网民来说,短短几年之内,经历了从浏览白底黑字的网页到硝烟四起的论坛,再到在线听歌.看片.网购支付.在线阅读.公共信息查询,人们还没来得及感叹进化之迅猛,移动互联网就伴随着手机.pad等各种终端扑面而来,模糊了线上线下的界限,把用户体验推向了极致.然后大家开始关注转向网页的兼容性.打开速度.交互体验.App应用的反应时间.能否被不同地区的用户访问. 下面介绍一些App应用从开发到服务性能监测的一些工具和途径: 开发工具: 1.Bizness Apps 一个傻瓜

小灶时间-左手git右手md,程序员必备工具

1. 为啥学git和md 今天开始我们来学习一些程序员必备的工具,其中我感觉最先了解的就是git和md了. git的用途和好处 git是源代码管理工具.程序员每天要写很多代码(假如不那么懒的话),就不可避免地对代码进行增删改查,如果每次修改都要靠大脑记,那早就死翘翘了.于是,勤劳的先辈们发明了源代码管理工具,准确记忆每一次修改,这样就可以在需要的时候随时查阅代码变化或回到之前的代码版本. git是分布式的代码管理方式.与传统的svn相比,git的用户,在每个人的电脑端都有完整的代码库,只需要简单

Java 程序员必备的10款开源工具

Java世界中存在许多工具,从Eclipse,NetBeans和IntelliJ IDEA等著名的IDE开始到Java开发人员应该知道的JVM分析和监视工具,如JConsole,VisualVM,Eclipse Memory Analyzer等. 如果你是一位经验丰富的Java开发人员,你可能对这些工具很熟悉,但如果不是,现在就是是开始学习这些工具的好时机. 在本文中,我将重点介绍适用于各种Java开发人员的通用工具,例如核心Java 开发人员和Web开发人员. JIRA Atlassian的J