VisualVM是一个专门用于监控Java的虚拟机JVM的监控工具,大家都知道java的环境下许多东西都是命令行的形式,而这款工具能够让用户获得一个图形界面来方便你快捷的查看多个java应用程序的相关信息。
通俗的讲,VisualVM是一种集成了多种JDK命令行工具的可视化工具,能够为我们的用户提供强大的分析能力,而且最主要的就是这些全部免费,你可以不花费任何代价,就可以利用这款软件管理好自己的java应用程序,当然用户如果想要使用最新的软件还是需要最新的java/soft/4845.html版本的。当然,VisualVM的功能还是非常强大的,一些工具能够帮助用户生成和分析海量数据、跟踪内存泄露、监控垃圾回收器、执行内存和CPU分析等等,有需要的用户不要错过哦。
1、监视:监视是一种用来查看应用程序运行时行为的一般方法。通常会有多个视图(View)分别实时地显示 CPU 使用情况、内存使用情况、线程状态以及其他一些有用的信息,以便用户能很快地发现问题的关键所在。
2、转储:性能分析工具从内存中获得当前状态数据并存储到文件用于静态的性能分析。Java 程序是通过在启动 Java 程序时添加适当的条件参数来触发转储操作的。它包括以下三种:
3、系统转储:JVM 生成的本地系统的转储,又称作核心转储。一般的,系统转储数据量大,需要平台相关的工具去分析,如 Windows 上的 windbg 和 Linux 上的 gdb。
4、Java 转储:JVM 内部生成的格式化后的数据,包括线程信息,类的加载信息以及堆的统计数据。通常也用于检测死锁。
5、堆转储:JVM 将所有对象的堆内容存储到文件。
6、快照:应用程序启动后,性能分析工具开始收集各种运行时数据,其中一些数据直接显示在监视视图中,而另外大部分数据被保存在内部,直到用户要求获取快照,基于这些保存的数据的统计信息才被显示出来。快照包含了应用程序在一段时间内的执行信息,通常有 CPU 快照和内存快照两种类型。
7、CPU 快照:主要包含了应用程序中函数的调用关系及运行时间,这些信息通常可以在 CPU 快照视图中进行查看。
8、内存快照:主要包含了内存的分配和使用情况、载入的所有类、存在的对象信息及对象间的引用关系等。这些信息通常可以在内存快照视图中进行查看。
9、性能分析:性能分析是通过收集程序运行时的执行数据来帮助开发人员定位程序需要被优化的部分,从而提高程序的运行速度或是内存使用效率,主要有以下三个方面:
10、CPU 性能分析:CPU 性能分析的主要目的是统计函数的调用情况及执行时间,或者更简单的情况就是统计应用程序的 CPU 使用情况。通常有 CPU 监视和 CPU 快照两种方式来显示 CPU 性能分析结果。
11、内存性能分析:内存性能分析的主要目的是通过统计内存使用情况检测可能存在的内存泄露问题及确定优化内存使用的方向。通常有内存监视和内存快照两种方式来显示内存性能分析结果。
12、线程性能分析:线程性能分析主要用于在多线程应用程序中确定内存的问题所在。一般包括线程的状态变化情况,死锁情况和某个线程在线程生命期内状态的分布情况等。
1、内存分析
VisualVM 通过检测 JVM 中加载的类和对象信息等帮助我们分析内存使用情况,我们可以通过 VisualVM 的监视标签和 Profiler 标签对应用程序进行内存分析。
在监视标签内,我们可以看到实时的应用程序内存堆以及永久保留区域的使用情况。
此外,我们也可以通过 Applications 窗口右击应用程序节点来启用“在出现 OOME 时生成堆 Dump”功能,当应用程序出现 OutOfMemory 例外时,VisualVM 将自动生成一个堆转储。
在 Profiler 标签,点击“内存”按钮将启动一个内存分析会话,等 VisualVM 收集和统计完相关性能数据信息,将会显示在性能分析结果。通过内存性能分析结果,我们可以查看哪些对象占用了较多的内存,存活的时间比较长等,以便做进一步的优化。
此外,我们可以通过性能分析结果下方的类名过滤器对分析结果进行过滤。
2、CPU 分析
VisualVM 能够监控应用程序在一段时间的 CPU 的使用情况,显示 CPU 的使用率、方法的执行效率和频率等相关数据帮助我们发现应用程序的性能瓶颈。我们可以通过 VisualVM 的监视标签和 Profiler 标签对应用程序进行 CPU 性能分析。
在监视标签内,我们可以查看 CPU 的使用率以及垃圾回收活动对性能的影响。过高的 CPU 使用率可能是由于我们的项目中存在低效的代码,可以通过 Profiler 标签的 CPU 性能分析功能进行详细的分析。如果垃圾回收活动过于频繁,占用了较高的 CPU 资源,可能是由内存不足或者是新生代和旧生代分配不合理导致的等。
在 Profiler 标签,点击“CPU”按钮启动一个 CPU 性能分析会话 ,VisualVM 会检测应用程序所有的被调用的方法。当进入一个方法时,线程会发出一个“method entry”的事件,当退出方法时同样会发出一个“method exit”的事件,这些事件都包含了时间戳。然后 VisualVM 会把每个被调用方法的总的执行时间和调用的次数按照运行时长展示出来。
此外,我们也可以通过性能分析结果下方的方法名过滤器对分析结果进行过滤。
3、线程分析
Java 语言能够很好的实现多线程应用程序。当我们对一个多线程应用程序进行调试或者开发后期做性能调优的时候,往往需要了解当前程序中所有线程的运行状态,是否有死锁、热锁等情况的发生,从而分析系统可能存在的问题。
在 VisualVM 的监视标签内,我们可以查看当前应用程序中所有活动线程和守护线程的数量等实时信息。
VisualVM 的线程标签提供了三种视图,默认会以时间线的方式展现。另外两种视图分别是表视图和详细信息视图。
时间线视图上方的工具栏提供了缩小,放大和自适应三个按钮,以及一个下拉框,我们可以选择将所有线程、活动线程或者完成的线程显示在视图中。
4、快照功能
我们可以使用 VisualVM 的快照功能生成任意个性能分析快照并保存到本地来辅助我们进行性能分析。快照为捕获应用程序性能分析数据提供了一个很便捷的方式因为快照一旦生成可以在任何时候离线打开和查看,也可以相互传阅。
VisualVM 提供了两种类型的快照:
Profiler 快照:当有一个性能分析会话(内存或者 CPU)正在进行时,我们可以通过性能分析结果工具栏的“快照”按钮生成 Profiler 快照捕获当时的性能分析数据。
应用程序快照:我们可以右键点击左侧 Applications 窗口中应用程序节点,选择“应用程序快照”为生成一个应用程序快照。应用程序快照会收集某一时刻的堆转储,线程转储和 Profiler 快照,同时也会捕获 JVM 的一些基本信息。
5、转储功能
线程转储的生成与分析
VisualVM 能够对正在运行的本地应用程序生成线程转储,把活动线程的堆栈踪迹打印出来,帮助我们有效了解线程运行的情况,诊断死锁、应用程序瘫痪等问题。
当 VisualVM 统计完应用程序内线程的相关数据,会把这些信息显示新的线程转储标签。
VisualVM 能够生成堆转储,统计某一特定时刻 JVM 中的对象信息,帮助我们分析对象的引用关系、是否有内存泄漏情况的发生等。
当 VisualVM 统计完堆内对象数据后,会把堆转储信息显示在新的堆转储标签内,我们可以看到摘要、类、实例数等信息以及通过 OQL 控制台执行查询语句功能。
堆转储的摘要包括转储的文件大小、路径等基本信息,运行的系统环境信息,也可以显示所有的线程信息。
从类视图可以获得各个类的实例数和占用堆大小数,分析出内存空间的使用情况,找出内存的瓶颈,避免内存的过度使用。
通过实例数视图可以获得每个实例内部各成员变量的值以及该实例被引用的位置。首先需要在类视图选择需要查看实例的类。
此外,还能对两个堆转储文件进行比较。通过比较我们能够分析出两个时间点哪些对象被大量创建或销毁。
展开内容
9.1/277.8M
百度开发者是一款很好用的小程序开发软件。这款软件可以帮助用户快速简单的进行小程序的开发作用,功能齐全,操作简单,一键操作,快速的进行操作。不管是想要进行模拟器,或者是编辑器还是调试器的编译。
查看
9.5/65.68M
Apkdb官方版是一款操作简单、界面简洁、十分实用的一款安卓apk反编译工具,除了能直接反编译修改apk文件以外,Apkdb还是个工具集合箱,内部集合了当今最强悍,最犀利的APK及Dex文件编译工具。
9.1/38.09M
Jailer是一款功能十分强大的智能数据提取工具,它可以帮助你从关系数据库中直接导出连续、相关的行数据,然后你可以将这些数据直接在你自己的开发测试环境使用,并且支持DB2、Firebird、Derby等应用,例如你可以在不损害其它数据完整性的情况下删除某一特定数据行从而提高数据库
10.0/2.61M
scite编辑器是一款很好用的编辑器I,主要针对代码编辑,比如C/C++、PHP、C#、Perl等等,安装完即可使用,而且相比较于其他同类软件,小编带来的这款最亮眼的就是支持用户导出,你可以轻松的将编写完的代码导出为PDF/HTML/RTF等格式的文件,并且高亮的内容也可以
9.3/5.34M
DeDeDark(Delphi反编译工具)是一款十分实用的编程工具,它有着简体中文的操作界面,能够支持用户快速对delphi进行反编译处理,处理后,所有的目标dfm文件,可以进行编辑,但源代码还是会以asm形式显示。
9.0/1.6M
junit4 jar包官方版是junit框架中的第四代,也是最新的一代,同样的也是有史以来最大改进的一代,其主要的目的就是利用java5的Annotation特性简化测试用例的编写,让用户能够快速的完成测试工作,多数的Java开发环境已经继承了我们的junit作为单元测试的工具,
9.0/562K
opengl es是OpenGL三维图形API的子集、为PDA和游戏主机等嵌入式设备设计,这个opengl es 3.0则是这一系列的第三代,该版本能够让我们的用户在支持迎检的要求上更加容易,同时改标准也为移动是被带来更多桌面版的功能。
查看
9.0/29.82M
hudson电脑版是一款非常做持续集成必不可少的工具,是现在著名的Jenkins的前身,主要用来让我们的用户持续、自动的构建项目还能够构建自动化测试项目,软件基于java开发,能够用于监控程序的重复工作,同时hudson电脑版也是一款开源软件项目,能够为用户提供一个开放易用的软件
9.0/8.21M
maven是一个项目对象模型(POM),能够通过一小段描述信息就能够管理项目的构建、报告,是非常不错的软件项目管理工具,除了一程序构建能力为特色外,还为用户提供高级项目管理工具,由于Maven的缺省构建规则有较高的可重用性,所以常常用两三行Maven构建脚本就可以构建简单的项目。
9.0/4.73G
Appium官方版是一款开源的、能够多平台进行自动化测试的强大工具,使用软件用户就可以开始撰写和运行测试的主要指南,其中包括IOS、Android和Android旧设备的说明,如果用户有兴趣在物理硬件上进行测试,也可以通过真实设备指南进行操作。
9.1/3.76M
seraph脚本编辑器是一款行内顶尖的脚本控制软件,不知道大家接触过鼠标点击器没有,其中有一个功能就是脚本来实现的,而seraph脚本编辑器就是这样的一样脚本生成器,设置键盘上的任意一个按键,然后seraph脚本编辑器就会直接生产脚本代码,非常的使用且方便!
9.1/854K
OpenGL ES 2.0是OpenGL三维图形API的子集,针对手机、PAD和游戏主机等嵌入式设备设计,而小编带来的OpenGL ES 2.0是其2.0版本,这一版本主要针对可编程管线硬件,参照OpenGL 2.0的规范定义的。
9.0/11.63M
HttpClient是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
查看
9.4/6.48M
超龙APK反编译专家是一款免费但功能强大的安卓APK反编译软件,它能让你的APK文件的反编译变得轻松简单,让您在电脑上随意修改apk文件,可对apk文件进行解包、打包、签名、汉化等操作,还可以修改xlm、arsc等资源,从修改到签名一条龙服务,是apk文件汉化的好帮手。
9.0/81.67M
CryEngine 5是一款强大的游戏引擎,能够为我们的用户带来非常棒的游戏制作体验,用户可以利用这款软件进行虚拟现实(VR)的游戏制作,也能够实现其他的游戏开发功能,用户可以选择付费使用,也可以选择免费使用,当然付费和不付费所获得的功能是不一样的,最主要的就是开发的游戏如果用于
9.0/23.98M
node.js其实就是一个Javascript的运行环境,大家做过相关了解的应该都知道Javascript,换句话来说就是一种直译式脚本语言,但是它不能直接运行。所以小编大家带来了node.js。node.js对是对Google V8引擎进行了封装。所以让V8引擎执行Javasc