GC与CPU与内存的查看与分析

本文主要讲visualVM,MAT的下载配置;以及如何运用visualVM生成hprof文件;如何用visualVM分析CPU消耗,程序瓶颈在哪里;怎么用MAT导入hprof文件以及简单的查看,仅推荐刚刚接触GC的萌新食用,讲得不对的地方欢迎大佬指正

---------------------------------------------------------------------------------------------------------------------------

万能分割线--------------万能分割线--------------万能分割线--------------万能分割线--------------万能分割线----------

---------------------------------------------------------------------------------------------------------------------------

visualVM下载:

打开网址:   https://visualvm.github.io/ 点击打开链接  这是visualVM下载地址,打开你会看到这个界面

点击下载,当然等你看到的时候可能不是这个版本了,不要慌,下最新的

因为博主用的windows所以直接下载的上面的zip文件,Mac用户下载下面那个

下载后你会得到这么一个压缩包,解压到本地

visualVM 获得

用法:

如果大吉大利的话你会得到这个视图

如果不幸你的VisualVM没有搜索到Eclipse,不要慌,博主也遇到了,我来教你佛系修复法----->

  1. eclipse打开,右下角如果提示你更新就打开它,更新,没有提示说明已经是最新版或者更新被关闭
  2. 在eclipse打开后重新打开VM刷新一下看看如果没有
  3. 重启电脑,打开eclipse,打开VM如果成功那么大吉大利如果没有
  4. 说明真的出现了问题,VM弹出的窗口有网站,你进入网站找到和自己情况相吻合的异常处理,根据他的描述以及其他博客的帮助解决

大吉大利的用户看这边:

VisualVM的使用:

跑待检测的应用,注意:不要让你的程序过快的停止,否则VM会捕捉不到,而且程序停止后相应的线程也会被回收

打开VM你会发现左栏多了一个在跑的程序,打开它你会看到这个程序的简介

在Monitor中你可以选择查看CPU,内存,类,线程的使用与运行情况:

右侧Perform GC是手动GC,也就是手动进行垃圾回收,因为博主将文件统统读进了List中所以几乎没有自动GC,你们在跑自己的程序时也许会有较多的GC次数

Heap Dump是生成一个当前dump的信息,待会我们要用它来生成hprof文件

Treads中专门查看线程的产生与注销,如果不是并发编程可以不用看

优化的重点来了--->通过CPU查看程序瓶颈在哪里

博主比较喜欢使用sampler,所以就主要讲解这个了

在sample中点击CPU

展开你会看到各个函数用的cpu时间

在下图你可以看到有一个东西叫做Self Time,这是个什么呢?,这个其实是这个函数的本身消耗的时间,还能有别的时间吗?当然有,那就是这个函数调用其它函数所消耗的时间,

分析下图我们可以看到博主的程序主要卡在Regular()函数本身的消耗,以及vertices()函数调用的add(),还有一部分是log占用的时间,要提升性能就只能通过这几个地方才能明显提升了

因为博主这个程序是已经优化过的,所以不能现场演示怎么调优了,之前这个函数是要跑四个多小时的,通过检查CPU的消耗,发现了程序瓶颈删减四五行代码后,运行时间缩短到了一分四十秒,并且结果没有错误,可见用这个工具是很有帮助的

Memory查看当前程序是谁在占用内存,可用于观察数据结构是否优良

Profiler:与sampler有异曲同工之妙

 注意这个地方你要写清楚要观察的是什么类,Memory的设置也是一样的

打开这几个地方你就能观察到数据

snapshot: 当你程序终止进程关闭时VM会提示你要不要保存snapshot

这个与Profiler异曲同工,都是用来观察你程序的运行信息的

欸,我们是不是忘了什么,,,,,,,,好吧hprof文件到底怎么生成呢??

记得下面这个图不?

点击heap dump 你就会观察到下图

点击这个文件你就会看到"另存为"这个按钮变亮了

点一下你就会看到,竟然可以保存为hprof文件了,,,

hprof -----get

进入下一阶段--

--MAT的下载:

网址:    http://www.eclipse.org/mat/    点击打开链接

打开后你会发现下载位置藏在了这两个地方,随便点击一个打开

这么多版本,应有尽有啊,因为楼主是64位系统所以选择了64位的

同样的套路

压缩包get

解压,MAT get

打开它你就会看到下图

file->Open Heap Dump

找到刚刚保存的hprof文件打开它

选择leak->finish

恭喜你获得第一份内存分析报告.可喜可贺可喜可贺

如果有想要深入了解MAT的读者,可以到网上搜各种深入教程,这里我就不献丑啦

希望屏幕前(帅气)/(漂亮)的你可以为深夜发博的博主来一波素质三连(点赞,关注,666),祝大家都能跑出运行漂亮的程序啊---

---碎觉碎觉

eclipse与visualVM与mat的更多相关文章

  1. Eclipse Memory Analyzer(MAT)使用

    https://user.qzone.qq.com/731573705/blog/1436389384 Eclipse Memory Analyzer(MAT)使用  一.OutOfMemoryErr ...

  2. [原创]Eclipse Memory Analyzer tool(MAT)工个使用介绍

    [原创]Eclipse Memory Analyzer tool(MAT)工个使用介绍

  3. 【Java线程与内存分析工具】VisualVM与MAT简明教程

    目录 前言 VisualVM 安装与配置 本地使用 远程监控 MAT 使用场景 安装与配置 获得堆转储文件 分析堆转储文件 窥探对象内存值 堆转储文件对比分析 总结 前言 本文将简要介绍Java线程与 ...

  4. Eclipse Memory Analyzer(MAT),内存泄漏插件,安装使用一条龙

    网上文档很多,但最初都有问题.整理一份,作为备份.使用过程:开发代码写完后,对可能出现内存溢出的代码,添加配置文件,生成.hprof文件,用memory Analyzer分析排查问题,且泄漏内存大小可 ...

  5. 在Eclipse中使用MAT分析Android程序内存使用状况(转)

    对于Android这种手持设备来说,通常不会带有太大的内存,而且一般用户都是长时间不重启手机,所以编写程序的时候必须要非常小心的使用内存,尽量避免有内存泄露的问题出现.通常分析程序中潜在内存泄露的问题 ...

  6. mat 使用 分析 oom 使用 Eclipse Memory Analyzer 进行堆转储文件分析

    概述 对于大型 JAVA 应用程序来说,再精细的测试也难以堵住所有的漏洞,即便我们在测试阶段进行了大量卓有成效的工作,很多问题还是会在生产环境下暴露出来,并且很难在测试环境中进行重现.JVM 能够记录 ...

  7. 使用Mat分析大堆信息

    在定位一线问题时经常碰测试中出现Out Of Memory的问题, 通过jmap查看,发现JVM heap全用满了.有很多工具可以查看JVM堆的信息, 收费的比如JProfiler, YourKit, ...

  8. Eclipse常用开发插件

    以下是我整理的自己开发过程中的常用Eclipse插件,按字母排序: (1)    AmaterasUML         介绍:Eclipse的UML插件,支持UML活动图,class图,sequen ...

  9. Android优化—— 内存分析工具 MAT 的使用

    1 内存泄漏的排查方法 Dalvik Debug Monitor Server (DDMS) 是 ADT插件的一部分,其中有两项功能可用于内存检查 : ·    heap 查看堆的分配情况 ·     ...

随机推荐

  1. EFCore Lazy Loading + Inheritance = 干净的数据表 (一) 【献给处女座的DB First程序猿】

    前言 α角 与 β角 关于α角 与 β角的介绍,请见上文 如何用EFCore Lazy Loading实现Entity Split. 本篇会继续有关于β角的彩蛋在等着大家去发掘./斜眼笑 其他 本篇的 ...

  2. Thread 详解

    转自:http://www.mamicode.com/info-detail-517008.html 目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 ...

  3. 俄罗斯方块win c 图形线程

    环境准备:visual stdio 2015,easyx, //

  4. JPA + SpringData 操作数据库--Helloworld实例

    前言:谈起操作数据库,大致可以分为几个阶段:首先是 JDBC 阶段,初学 JDBC 可能会使用原生的 JDBC 的 API,再然后可能会使用数据库连接池,比如:c3p0.dbcp,还有一些第三方工具, ...

  5. web前端之Javascript---function函数

    ---恢复内容开始--- js 支持两种函数:一类是语言内部的函数(如eval() ),另一类是自己创建的. 在 JavaScript 函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部 ...

  6. Shiro-Spring 授权操作

    Subject进行Shiro的授权操作,首先委托给Security Manager,在由Security Manager 委托给Authenticator,由Authenticator授权器进行真正的 ...

  7. aqua data studio 连接db2

    打开datastudio 右键本地数据库服务器 →注册服务器打开以下界面: 1:选择版本号(我这里是window 9.7版本的db2) 2:名称 按照需要的写 3.登录名/密码 4.ip port 数 ...

  8. Python第三章(北理国家精品课 嵩天等)

    一.数字类型及其操作 整数:pow(x,y),想算多大,就算多大:以0b或0B开头表示二进制:以0o或0O开头表示八进制:以0x或0X开头表示十六进制. 浮点数:取值范围-10^308至10^308, ...

  9. 万维网(WWW)

    简介:万维网(WWW)是 Internet上最为普及的一种应用服务,它是由成千上万万维网站点(简称网站)组成的一个联机信息存储系统. 万维网的工作模式采用客户机/服务器方式,在用户计算机上运行浏览器作 ...

  10. Redis安装以及Java客户端jedis连接不上相关问题解决

    安装步骤 1.由于Redis是由C 语言编写的 所以虚拟机编译需要C的编译环境 用命令 yum install gcc-c++ 2.用SFTP上传Redis安装包并解压 3.进入Redis源码目录 b ...