以下内容翻译自(机翻):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或内存的使用情况(转)的更多相关文章

  1. linux下分析java程序占用CPU、内存过高

    一.CPU过高分析 1)使用TOP命令查看CPU.内存使用状态可以发现CPU占用主要分为两部分,一部分为系统内核空间占用CPU百分比,一部分为用户空间占用CPU百分比.其中CPU状态中标示id的为空闲 ...

  2. JAVA应用程序占用CPU、内存过高分析过程

    1.查看cpu占有率 top -P 2.查看进程cpu占用率 ps -mp 3749 -o THREAD,tid,time|sort -rn|head -n 20 查看占用cpu高,且占用时间长的线程 ...

  3. java分解质因数,具体程序分析和代码

    题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 将一个正整数分解质因数分析:对n进行分解质因数,找到最小的质数k如果这个质数恰好等于n则说明分解质因数过程已经结束,打印输出 ...

  4. java基础-配置java的环境变量

    学习java之前首先在https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html上面下载与 ...

  5. 【JAVA】配置JAVA环境变量,安装Eclipse

    Java程序依赖JDK,就像C#程序依赖.NetFrameWork一样. 所以在开发之前,必须在win7或者是linux上,安装jdk(JavaDevelopkit)里面包括java一些工具,还有JR ...

  6. 【JAVA】配置JAVA环境变量

    系统变量新建,添加 变量名JAVA_HOME 变量值为C:\Java\jdk版本号 修改 Path为 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

  7. [译]Java 垃圾回收的监控和分析

    说明:这篇文章来翻译来自于Javapapers 的Java Garbage Collection Monitoring and Analysi 在这个系列的Java垃圾回收教程中,我们将看到可用于垃圾 ...

  8. Java VisualVM使用

    Java VisualVM Java VisualVM官网 Java VisualVM介绍 Java VisualVM is a tool that provides a visual interfa ...

  9. Linux下使用java获取cpu、内存使用率

    原文地址:http://www.voidcn.com/article/p-yehrvmep-uo.html 思路如下:Linux系统中可以用top命令查看进程使用CPU和内存情况,通过Runtime类 ...

随机推荐

  1. 个人微信二次开发API接口

    通过这个API接口可以做什么? 通过我们提供的API接口您可以开发: 工作手机(如:X创,X码,XX管家等) 微信群讲课软件(如:讲课X师,一起X堂等) 微信社群管理软件(如:小X管家,微X助手等) ...

  2. mysql select 操作优先级

    单表查询操作 select filed1,filed2... form table where ... group by ... having .... order by ... limit ... ...

  3. python自动化测试学习笔记-6urllib模块&request模块

    python3的urllib 模块提供了获取页面的功能. urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capat ...

  4. MFC学习篇(二):error LNK2005 及其解决方法

    环境:MFC条件下添加原有代码 >nafxcwd.lib(afxmem.obj) : error LNK2005: @YAPAXI@Z) already defined in LIBCMTD.l ...

  5. [Luogu 1312] noip11 Mayan游戏

    [Luogu 1312] noip11 Mayan游戏 Problem: Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即 ...

  6. android 虚拟机,文件导入sdcard下报错,Read-only file system

    解决方案-------------------- eclipse -> windows->Android AVD Manager 里选择你的AVD,edit里SD Card 选择File, ...

  7. 属性字符串(NSAttributedString)的简单应用

    属性字符串NSAttributedString 可以对字符串附加格式信息,由于对于对不同文本片段使用不同的格式,属性字符串类特别合适. IOS 6中对样式文本有了大改善,大部分主要的UIKit控件都允 ...

  8. Android 自己搭建一个直播系统吧

    服务端用 SRS(Simple Rtmp Server),在这里下载simple-rtmp-server需要Linux系统最好是Ubuntu,装个Ubuntu虚拟机就行了在Linux里,解压缩SRS ...

  9. JS高级——作用域链

    基本概念 1.只要是函数就可以创造作用域 2.函数中又可以再创建函数 3.函数内部的作用域可以访问函数外部的作用域 4.如果有多个函数嵌套,那么就会构成一个链式访问结构,这就是作用域链 <scr ...

  10. JS——正则案例

    验证座机号码 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT ...