以下内容翻译自(机翻):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. [Swift通天遁地]七、数据与安全-(13)单元测试的各个状态和应用

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  2. C语言过时了?为什么还要推荐每一位程序员都来学一下C语言?

    互联网蓬勃发展的时代,有一类人做出了巨大的贡献,这一群人被大家称之为程序员,怎样才能成为一名优秀的程序员呢,为什么每一个程序员都需要学习C语言呢? 就让我来跟大家分享分享:   在学习C/C++或者想 ...

  3. Akka源码分析-FSM

    akka还有一个不常使用.但我觉得比较方便的一个模块,那就是FSM(有限状态机).我们知道了akka中Actor模型的具体实现之后,就会发现,Akka的actor可以非常方便的实现FSM.其实在akk ...

  4. VUE修改每个页面title

    //index.js routes: [ { name:'home', path: '/home/:openname', component: Home, meta: { title: '首页' } ...

  5. c++小游戏

    #include <iostream> using namespace std; double shengmingli=2000;//定义主角初始生命力 int gongjili=150; ...

  6. android 二维码 扫描,生成,竖屏

    最近公司有用到二维码,生成,扫描,所以学习了一下,和大家分享: demo 见下面链接,已经改成竖屏: http://download.csdn.net/detail/q610098308/868101 ...

  7. 【Leetcode 86】 Partition List

    问题描述: 给定一个list, 将所有小于x的node放到左边,剩下的保持原样. 问题解决: 闲的无聊,用c++和python都做了一遍. 代码如下: # Definition for singly- ...

  8. 研磨JavaScript系列(二):没有类

    object就是对象的类型.在JavaScript中不管多么复杂的数据和代码.都可以组织成object形式的对象. 但JavaScript没有"类"概念. 看下面这段JavaScr ...

  9. GridView动态计算高度

    // 动态加载GridView 高度 public static void setListViewHeightBasedOnChildren(MyGridView myGridView) { List ...

  10. Makefile精髓篇【转】

    什么是makefile?或许非常多Winodws的程序猿都不知道这个东西,由于那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序猿,makefile还是 ...