使用Java VisualVM配置Java应用程序/分析CPU或内存的使用情况(转)
以下内容翻译自(机翻):https://baptiste-wicht.com/posts/2010/07/profile-applications-java-visualvm.html
当您需要发现应用程序的哪些部分消耗更多的CPU或内存时,必须使用分析器来执行此操作。
默认使用Sun JDK打包的一个分析器是Java VisualVM。这个分析器真的很简单的使用,真的很强大。

在这篇文章中,我们将看到如何安装它并使用它来配置应用程序。
通常,要安装它,您无所事事,因为它与JDK一起安装。但是在几个Unix系统中,像Ubuntu一样,情况并非如此。如果你想安装它,只需使用apt-get(或aptitude):
sudo apt-get install visualvm
要启动它,只需启动jvisualvm(jvisualvm.exe在jdk for Windows的bin目录中)。
这将打开以下窗口:

在这里看不到很多有趣的事情。要配置一个应用程序,您只需启动它,VisualVM会将其检测为已启动:

之后,您只需双击即可查看有关正在运行的应用程序的信息。您有四个可用于应用程序的选项卡(概述,监视器,线程,分析器)。我们将看到所有4个选项卡。首先,默认选项卡,概述:

此选项卡包含有关启动的应用程序的主要信息。您可以看到主类,命令行的参数,JVM参数。您还可以看到运行程序的JVM类型以及JVM所在的位置。您可以看到程序中设置的所有属性。
一个更有趣的选项卡是“监视器”选项卡:

此选项卡遵循您的应用程序的CPU和内存使用。您在此视图中有4个图形。第一个,从左到右,从上到下,显示CPU使用情况和垃圾收集器CPU使用情况。第二个图形显示堆空间和PermGen空间的用法。下一个图显示应用程序中加载的类的总数,最后一个显示当前运行的线程数。使用这些图表,您可以看到应用程序是否占用了CPU,或者应用程序是否使用了内存。
第三个选项卡提供了有关线程的一些细节:

在这个视图中,您可以看到应用程序的不同线程如何改变状态以及它们的演进过程。您还可以看到每次通过每个状态的时间,您可以获得有关所需线程的详细信息。
现在,我认为最有趣的选项卡是Profiler的一个:

当您首先打开此选项卡时,它根本不包含任何信息。在查看信息之前,您必须先进行一次剖析。我们将从CPU分析开始。只需点击CPU按钮,仪器将开始。在仪器仪表期间,应用程序将被阻止。仪器完成后,您可以再次访问该应用程序,您将看到在该表中显示的分析结果。当然,分析在您的应用程序上有一个开销。通常这是不可见的,但对于某些应用程序,您可以松动大量的流动性。以下是我通过简单应用获得的结果:

在我的例子中,我们可以看到waitForTimeout方法占用CPU时间的81.6%。我们还可以看到,notifyDecision和getSensor方法是两个接下来的大多数CPU消耗方法,也许是优化它们是有趣的。您还可以查看每个调用的次数,也许您会发现一个被调用太多时间的方法。
我们可以做的下一个分析是内存分析。再次,您必须启动概要分析,仪器将开始,在此期间,应用程序将被冻结。以下是我的应用程序的结果:

这里我们可以看到这个应用程序存储一些大的double []和float []数组,而且EllipseIterator和BasicStroke类也占用了大量的内存空间。
在内存和CPU分析中,您可以将结果保存到文件以便稍后查看。例如,你可以让一个应用程序工作一整夜,保存结果早上检查,或进行三个分析比较三。
总而言之,我不得不说,这个分析器是非常简单的,但也是非常强大的使用。我们有一个我们想要的分析器的主要功能,结果非常好。这种工具真的可以帮助您改进应用程序以减少CPU和内存。当然,这种工具不会做任何事情,它只是帮助显示应用程序的哪些部分必须改进,改进部分是开发人员的任务,而不是最简单的任务。但是拥有这种工具是个好的开始。
而且这东西还可以安装插件,【工具】->【插件】

参考:
https://baptiste-wicht.com/posts/2010/07/profile-applications-java-visualvm.html(以上内容转自此篇文章)
http://jiajun.iteye.com/blog/1180230
https://visualvm.github.io/(官网)
使用Java VisualVM配置Java应用程序/分析CPU或内存的使用情况(转)的更多相关文章
- linux下分析java程序占用CPU、内存过高
一.CPU过高分析 1)使用TOP命令查看CPU.内存使用状态可以发现CPU占用主要分为两部分,一部分为系统内核空间占用CPU百分比,一部分为用户空间占用CPU百分比.其中CPU状态中标示id的为空闲 ...
- JAVA应用程序占用CPU、内存过高分析过程
1.查看cpu占有率 top -P 2.查看进程cpu占用率 ps -mp 3749 -o THREAD,tid,time|sort -rn|head -n 20 查看占用cpu高,且占用时间长的线程 ...
- java分解质因数,具体程序分析和代码
题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 将一个正整数分解质因数分析:对n进行分解质因数,找到最小的质数k如果这个质数恰好等于n则说明分解质因数过程已经结束,打印输出 ...
- java基础-配置java的环境变量
学习java之前首先在https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html上面下载与 ...
- 【JAVA】配置JAVA环境变量,安装Eclipse
Java程序依赖JDK,就像C#程序依赖.NetFrameWork一样. 所以在开发之前,必须在win7或者是linux上,安装jdk(JavaDevelopkit)里面包括java一些工具,还有JR ...
- 【JAVA】配置JAVA环境变量
系统变量新建,添加 变量名JAVA_HOME 变量值为C:\Java\jdk版本号 修改 Path为 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
- [译]Java 垃圾回收的监控和分析
说明:这篇文章来翻译来自于Javapapers 的Java Garbage Collection Monitoring and Analysi 在这个系列的Java垃圾回收教程中,我们将看到可用于垃圾 ...
- Java VisualVM使用
Java VisualVM Java VisualVM官网 Java VisualVM介绍 Java VisualVM is a tool that provides a visual interfa ...
- Linux下使用java获取cpu、内存使用率
原文地址:http://www.voidcn.com/article/p-yehrvmep-uo.html 思路如下:Linux系统中可以用top命令查看进程使用CPU和内存情况,通过Runtime类 ...
随机推荐
- 通过类库ChineseChar实现将汉字转化为拼音
//封装dllusing Microsoft.International.Converters.PinYinConverter;using System.Text;namespace Utils{ p ...
- [App Store Connect帮助]三、管理 App 和版本(1)添加 App 至您的帐户
在向 App Store Connect 上传您 App 的构建版本之前,您必须先在您的 App Store Connect 帐户内新建一个 App. 如果您想将 iOS App 和 Apple TV ...
- [Swift通天遁地]五、高级扩展-(12)扩展故事板中的元件添加本地化功能
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- 7 C#变量-把你想要的东西存在C#程序里边
现在你已经可以用Console.WriteLine("")在dos窗口里打印一些东西出来,而且你还会使用c#进行数学运算.接下来的一步你要开始学习使用变量了.用c#编程,变量就是一 ...
- debug时红点消失
问题描述:debug时红色断点和黄色小箭头不见,而用行代码高亮的形式时. 解决办法:可以用设置 工具 => 选项 => 文本编辑器 => 指示器边距 勾上选项
- inner join / left join / right join
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只 ...
- Redux 基础概念
Redux is a predictable state container for JavaScript apps.,亦即 Redux 希望能提供一个可以预测的 state 管理容器,让开发者可以可 ...
- 挂载硬盘,提示 mount: unknown filesystem type 'LVM2_member'的解决方案
问题现象:由于重装linux,并且加了固态硬盘,直接将系统装在固态硬盘中.启动服务器的时候, 便看不到原来机械硬盘的挂载目录了,不知如何访问机械硬盘了.直接用命令 mount /dev/sda3 /s ...
- RTL Compiler之Example
Synthesis = Translation + Logic Optimization + Mapping Step 1 Source files 1) make directory mkdir ...
- 详解HashMap数据结构实现
HashMap的设计是由数组加链表的符合数据结构,在这里用自己的语言以及结合源码去总结一下,如果有不对的地方希望评论指正,先拱手谢谢. HashMap是日常中非常常用的一种数据结构,我们要想深入了解学 ...