使用Java VisualVM分析您的应用程序

当您需要发现应用程序的哪个部分消耗更多的CPU或内存时,必须使用探查器执行此操作。

默认情况下,Sun JDK中附带的一个探查器是Java VisualVM。 这个事件探查器非常简单易用,功能强大。

在这篇文章中,我们将看到如何安装它并使用它来分析应用程序。
通常,无需安装它,因为它与JDK一起安装。 但是在几个Unix系统中,例如Ubuntu,情况并非如此。 如果要安装它,只需使用apt-get(或aptitude):

须藤apt-get install visualvm

要启动它,只需启动jvisualvm(Windows的jdk的bin目录中的jvisualvm.exe)。
这将打开以下窗口:

这里没有很多有趣的东西。 要分析应用程序,只需启动它,VisualVM就会检测到它已启动:

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

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

此选项卡跟踪您的应用程序的CPU和内存使用情况。 您在此视图中有4个图。 第一个从左到右,从上到下显示CPU使用率和Garbage Collector CPU使用率。 第二张图显示堆空间和PermGen空间的使用情况。 下一个图显示了应用程序中加载的类的总数,最后一个图显示了当前正在运行的线程数。 通过这些图,您可以查看应用程序占用的CPU过多还是应用程序占用的内存过多。

第三个选项卡提供有关Threads的一些详细信息:

在此视图中,您可以看到应用程序的不同线程如何改变状态以及它们如何演变。 您还可以查看每次进入每种状态的时间,并且可以了解有关所需线程的详细信息。
现在,我认为最有趣的标签是Profiler之一:

第一次打开此选项卡时,它根本不包含任何信息。 您必须先进行一种分析,然后才能查看信息。 我们将从CPU分析开始。 只需单击CPU按钮,仪器就会启动。 检测期间,该应用程序将被阻止。 检测完成后,您可以再次访问该应用程序,并且将在表中显示概要分析的结果。 当然,分析会对您的应用程序造成负担。 通常它是不可见的,但是对于某些应用程序,您可能会失去很多流动性。 这是我通过简单的应用程序获得的结果:

在我的示例中,我们可以看到waitForTimeout方法占用了CPU时间的81.6%。 我们还可以看到,notifyDecision和getSensor方法是紧随其后的两个最消耗CPU的方法,也许对它们进行优化很有趣。 您还可以查看每个方法的调用次数,也许您会发现一个调用时间过多的方法。

我们可以做的下一个性能分析是内存性能分析。 再次在这里,您必须开始分析,仪器将启动,在此期间,应用程序将被冻结。 这是我的申请结果:

在这里,我们可以看到该应用程序存储了一些大的double []和float []数组,EllipseIterator和BasicStroke类也占用了大量的内存空间。
在内存和CPU性能分析中,您都可以将结果保存到文件中以供日后查看。 例如,您可以让应用程序通宵工作,早上保存结果并检查结果,或者进行三个性能分析并比较三个结果。

总而言之,我不得不说这个探查器非常简单,但是使用起来却非常强大。 我们拥有分析器所需的主要功能,并且效果非常好。 这种工具确实可以帮助您改进应用程序,以减少CPU和内存的使用。 当然,这种工具并不能解决所有问题,它只是帮助显示必须改进应用程序的哪一部分,改进部分是开发人员的任务,而不是最简单的。 但是拥有这种工具是一个好的开始。

参考:通过@Blog(“ Baptiste Wicht”)的 JCG合作伙伴 Baptiste Wicht 使用Java VisualVM对应用程序进行概要分析 。

相关文章 :

  • 从CLI监视OpenJDK
  • 绩效焦虑–关于绩效不可预测性,度量和基准
  • JVM选项:-client vs -server
  • Java中的低GC:使用原语而不是包装器

翻译自: https://www.javacodegeeks.com/2012/01/profile-your-applications-with-java.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcSDE for SQL Server安装及在ArcMap中创建ArcSDE连接

ArcSDE for SQL Server安装及在ArcMap中创建ArcSDE连接 原文:ArcSDE for SQL Server安装及在ArcMap中创建ArcSDE连接安装ArcSDE for SQL Server,最后一步成功后的界面如下:在ArcMap中创建ArcSDE连接,截图如下:posted on 2016-08-0…

python调用c函数传字符串参数_Python使用ctypes模块调用DLL函数之传递数值、指针与字符串参数...

在Python语言中,可以使用ctypes模块调用其它如C语言编写的动态链接库DLL文件中的函数,在提高软件运行效率的同时,也可以充分利用目前市面上各种第三方的DLL库函数,以扩充Python软件的功能及应用领域,减少重复编写代码、…

沁恒CH554 KEIL环境搭建

首先下载WCHISPTool_Setup.exe http://www.wch.cn/products/CH554.html 123这三个可下载的都下吧,后面开发都要用的 安装好后运行,菜单栏上,功能->添加WCH MCU到KEIL器件库 这时候在KEIL安装目录里面的UV4文件夹下可以看到wch.cdb的文件…

【CV论文阅读】Rank Pooling for Action Recognition

这是期刊论文的版本,不是会议论文的版本。看了论文之后,只能说,太TM聪明了。膜拜~~ 视频的表示方法有很多,一般是把它看作帧的序列。论文提出一种新的方法去表示视频,用ranking function的参数编码视频的帧序列。它使用…

VS2019 WPF制作OTA上位机(一)新建工程

首先创建新项目,文件 -> 新建 -> 项目 下拉菜单选择C#和Window,选择WPF应用程序,下一步 输入项目名,下一步 这里选择.NET 5.0,也可以选择其他的,个人习惯.NET,点击创建 这时候出现初始…

户籍恢复需要体检吗_脑梗死后脚麻能恢复吗?需要多久能恢复呢?

脑梗死之后脚部麻木,这个有一部分是能够恢复的,但是相对而言,恢复的时间比较长,在临床当中出现脚麻主要是因为梗死破坏了患者的感觉神经中枢从而造成。脚部感觉麻木,瘙痒或者是有蚂蚁在上面爬的感觉。而且有的更加严重…

Alpha版本测试报告

一、测试计划 Alpha版本即将发布,我们组织队员进行这一版本的测试。 测试主要针对两方面:浏览器兼容性和功能完善性。 测试分兼容性测试与功能完善性两部分,兼容性测试分Windows操作系统、Linux系操作系统、Mac OS X操作系统以及手机端Androi…

VS2019 WPF制作OTA上位机(二)获取bin文件路径

OTA升级是通过无线通信远程把bin文件内容传输到单片机,完成升级。 因此上位机需要获取bin文件的路径,读取bin文件内容,将内容分割依次发送(因为单片机的接收缓存不会开得和bin文件一样大(十几K甚至几十K)&a…

linux更改用户名_破旧安卓手机第二春,在安卓手机上使用Linux_deploy运行Linux

由于服务器位于国外,害怕被墙掉导致数据丢失,所以在本地写了脚本每小时从服务器上导出并下载到本地。但是电脑不可能二十四小时开机,所以很想买一个树莓派4玩玩。但是太贵辽,还好搜索到了Android运行Linux的方法,下面记…

MCUXpress IDE常用设置

NXP的开发工具Xpress是基于eclipse制作的,我们如果需要设置一些东西可以直接搜索eclipse是怎么设置的。 1、字体大小 搜索eclipse字体大小,菜单Window > Preference 而Xpress是汉化了的,英语不好的同学可能懵逼,其实就是菜单栏…

C语言中空格符、空字符、字符数组结束符、换行、回车的区别

空格符和空字符是不一样的,在ASCII里面,空格(space)符号的ASCII码是32,而空字符是0, 2个是完全不一样的2个字符 空字符 一般来描述一个字符串的结尾,其实是控制符的一种,但不能理解为没有字符,应该理解为代表什么都没有的字符.好比回车0x0A和换行0x0D虽然不显示,但是也是控制字…

anaconda如何卸载库_小白必看!Anaconda安装全攻略

本文作者:戴 雯文字编辑:方 言技术总编:张馨月爬虫俱乐部云端课程来袭!爬虫俱乐部将于2020年8月25日至28日在线上举行Stata数据分析法律与制度专题训练营,主要是为了让学员掌握Stata软件进阶操作,涉及…

iOS开发网络篇—文件的上传

说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中。本文介绍如何不借助第三方框架实现iOS开发中得文件上传。 由于过程较为复杂,因此本文只贴出部分关键代码。 主控制器的关键代码: YYViewController.m 1 #import…

var模型的matlab实现_Eviews中VAR模型的操作、脉冲响应分析和方差分解的实现

打开文件所在位置,获取数据。选中变量右键open打开var操作EViews,在VAR对象的工具栏中选择“View”|“Lag Structure”|“AR Roots Table/ AR Roots Graph”选项,得到AR根的表和图。结果显示:VAR模型所有根模的倒数都小于1,即都在…

结构体、枚举类型

一、结构体 结构体:就是一个自定义的集合,里面可以放各种类型的元素,用法大体跟集合一样。 1、定义的方法: struct student { public int nianling; public int fenshu; public string name; public string sex; public int sum; …

NXP KW38开发杂记(一)MCUXpress 运行进入NMI_Handler

这里是大佬的具体分析过程,感兴趣可以看看 https://www.cnblogs.com/wenhao-Web/p/13618703.html 解决办法: 在startup_mkw38a4.c文件里,定位到Flash_Config {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE}; 把最后一个参数0xFFFFFFFE改…

25个让Java程序员更高效的Eclipse插件

Eclipse提供了一个可扩展插件的开发系统。这就使得Eclipse在运行系统之上可以实现各种功能。这些插件也不同于其他的应用(插件的功能是最难用代码实现的)。拥有合适的Eclipse插件是非常重要的,因为它们能让Java开发者们无缝的开发基于J2EE和服…

NXP KW38蓝牙开发(一)入门第一课:官网蓝牙广播和连接例程,NMI禁止

首先要下载开发使用的IDE:MCUXpresso IDE 下载链接: 进入nxp的官网,搜索KW38 向下翻看,找到Xpresso,点击进入 习惯使用IAR开发的同学也可以下IAR版本,这里以Xpresso为例 下载好后安装,一路默…

views 多个文件夹 netcore_.NET Core中的使用Kestrel服务器理解及应用

Kestrel是一个基于libuv的跨平台.NET Core web服务器,libuv是一个跨平台的异步I/O库。ASP.NET Core模板项目使用Kestrel作为默认的web服务器。Kestrel支持以下功能:HTTPS用于启用不透明升级的WebSockets位于Nginx之后的高性能Unix socketsKestrel 被.NET…

NXP UWB NCJ29D5开发(一)环境搭建

1、从NXP的共享账号下载资料 共享账号需要找对接的NXP人员拿到,他会把资料分享到这个账号,在这个账号里面可以下载 进入nxp官网,登录后点击my nxp,选择Software Licensing and Support 进入后接着选择View accounts 进入后选择…