JDK中有个好用的工具“VisualVM”可以实时可视化的查看到java程序内存变化情况,对于理解GC和java内存管理还是有很大帮助的,以前看论坛看帖子讲到java内存管理真是各说纷纭啊!有人说“JVM的内存分为两块堆和栈”,还有人说"JVM的内存分为三块(新生代、老年代、方法区)",想必很多人和我一样都搞得有点摸不着头脑了吧。下面来眼见为实:

工欲善其事必先利其器,首先要给VisualVM安装一些插件便于我们观察jvm的内存管理情况,

1         VisualVM简单介绍

1.1    打开VisualVM(这个工具放在JDK安装目录的bin目录下,双击jvisualvm.exe即可打开),如下图所示

1.2    以VisualVM自身为例,VisualVM本身也是一个java程序,当然也而已用VisualVM来分析

1.3    概述页面主要显示程序的启动参数和系统信息(如下图所示)

Ø  PID -- 程序启动后的进程号,在命令行中可以用 jps命令查看

Ø  主机 -- 如果是本机的话显示,localhost,如果是远程主机应该是显示远程主机的主机名或者IP

Ø  主类 -- 程序入口类(main方法所在的类)

Ø  参数 -- VisualVm 启动的时候使用的一些配置文件路径

Ø  JVM -- jvm类型

Ø  Java -- jdk的版本信息

Ø  Java Home -- JDK安装目录

l  JVM参数 -- VisualVm 启动时候设置的JVM参数

l  系统属性 -- java环境的系统参数

1.4    监视页面主要展示 系统资源占用情况(如下图所示)

Ø  CPU -- 展示java程序运行的时候占用的cpu资源 如下图中橙色的表示程序运行使用的cpu资源百分比,蓝色部分表示垃圾回收占用CPU资源百分比

Ø  堆 -- 这里要说明下堆内存的组成部分,堆是由老年代和新生代组成,其中新生代有由"伊甸园"和"两个幸存区组成"三部分组成,堆视图看到的资源占用实际是"老年代"、"伊甸园(Eden)"、"两个幸存者(Survivor )"的一个综合情况。

Ø  PermGen --  Perm 区用来存放java类以及其他虚拟机自己的静态数据,(常被称为持久代或者方法区)

Ø  类 -- 此视图 主要展示 当前程序加载了多少个类

Ø  线程 -- 当前程序的线程启动情况

§  执行垃圾回收 -- 手动触发一次GC 相当于在程序代码中调用(System.gc()),如果是远程连接到生产环境中请慎重点击。

§  堆Dump -- 生产当前程序的内存快照hprof文件,对于分析内存溢出问题比较有帮助。(可以查看当前程序内存中的所有对象)

1.5    线程页面(主要展示程序中所有的线程运行状态)

Ø  线程dump – 此按钮主要生产当前程序中所有线程的快照(对分析线程死锁,比较有帮助)

Ø  时间线 – 展示每个线程的实时运行状态(不同颜色代表不同的状态)

Ø  表 – 按照二维表格的形式展示每个线程不同状态的时间统计信息

Ø  详细信息 – 用饼图展示每个线程的运行状态

1.6    抽样器(应该算是线程页面功能的一个补充)

CPU-> CPU样例 – 主要展示方法消耗的CPU资源比例和时间

CPU->线程CPU时间 – 主要展示线程消耗的CPU资源信息

内存-> 堆柱状图 – 展示堆内存中各种对象占用的字节数和总实例数

内存->PermGen – 展示方法区各种对象消耗的内存情况

内存-> 每个线程分配—展示不同线程占用内存的情况

1.7    增加VisualGC插件

1.7.1    点击 工具->插件,然后在插件页面进入可用插件页面,点击检查更新,如下图所示会展示所有可用插件

1.7.2    选择VisualGC并点击安装,安装完成之后需要重新打开分析页面就能看到VisualGC页面,如下所示

根据VisualGC中的信息可以调整程序的启动参数,这样就不会再这是启动参数的时候拍脑袋了(以前工作中设置Tomcat的启动参数的时候确实是在拍脑袋)。

按照此图中的信息来看Eden区域GC次数明显过多,可以增大此区域的内存用来减少GC次数。

对于开篇引出的话题有人说“JVM的内存分为两块堆和栈”,还有人说"JVM的内存分为三块(新生代、老年代、方法区)"该有个结论了

对于堆栈说法的人他们是根据下图中的维度来看问题的

对于分代说法的人是根据下图中的维度来看待的

不能说谁对谁错吧,只是看待问题的维度不同而已,这里应该明确一下它们的关系

堆 = Old+Eden+S0+S1(下图中红色圈中的范围)

栈 = PerM区 下图中蓝色圈中的范围

VisualVM 使用心得相关推荐

  1. Java EE学习心得

    –Java EE学习心得   1.    称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...

  2. 测试心得:微图书销售小程序

    测试心得:微图书销售小程序 前言 这个学期差不多也将近结束,经过大半个学期,从项目需求的确认和项目文档的编写,到一步步的设计与实现,现在终于到了测试阶段,但是我们在测试阶段也暴露出了很多bug,但是每 ...

  3. java.lang.OutOfMemoryError:GC overhead limit exceeded填坑心得

    该文章出自:http://www.cnblogs.com/hucn/p/3572384.html 分析工具:http://www.blogjava.net/jjshcc/archive/2014/03 ...

  4. 计算机财务应用实验心得,计算机会计实习心得-20210628124643.doc-原创力文档

    计算机会计实习心得 计算机会计实习心得1 毕业实践环节是大学生在完成全部课程后.走向社会之前最真实的一个模拟实验,对于我们财会专业的学生,平时注意注重理论学习,缺乏实践锻炼,因此实习显得尤为重要.在本 ...

  5. html5考试总结300字,期中考心得300字5

    为了检验学生半个学期所学的知识而进行的一次考试,有利于学生比较正式地检验自己平时的学习水平,根据这个成绩,学生可以及时的调整学习心态和方法,更有效率地进行下一阶段的学习,期中考试主要考察学生前半学期的 ...

  6. Assembly学习心得

    http://blog.csdn.net/etmonitor/ Assembly学习心得 说明: 最近开始准备把学到的.NET知识重新整理一遍,眼过千遍不如手过一遍,所以我准备记下我的学习心得,已备参 ...

  7. 什么叫安装文件索引服务器,搜出精彩 玩转Windows 2008系统心得

    [IT168 专稿]不少朋友已经在不经意间与Windows Server 2008系统进行了亲密接触,在一段时间的接触之后,不知大家对该系统的文件搜索功能会有什么样的体会?其实,Windows Ser ...

  8. mysql主从数据库含义_(转)Mysql数据库主从心得整理

    管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验所写,整理了一下,分享给各位同行,希望对 ...

  9. java visualvm远程监控_深入理解JVM虚拟机12:JVM性能管理神器VisualVM介绍与实战

    本文转自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutori ...

最新文章

  1. JSP第二次作业_4小题
  2. html5 内嵌网页_如何分析并优化网页的性能?新梦想软件测试
  3. Apollo进阶课程⑰丨Apollo感知之旅——传感器选择和安装
  4. 提高代码可读性: 命名技术
  5. 洛谷P2606 [ZJOI2010]排列计数(数位dp)
  6. koa2+koa-views示例
  7. W3school笔记——HTML
  8. 高斯过程--在GPyTorch中实现一个个性化kernel
  9. 不依赖Flash浏览器插件,运行Flash的方法
  10. 抽象类是不是必须要有抽象方法
  11. SDOI2019R2翻车记
  12. forward() takes 2 positional arguments but 3 were given
  13. Crontab定时执行任务
  14. KALI用MSF监听Windows7
  15. Tomcat 提示 -Djava.endorsed.dirs=/Users/admin/apache-tomcat-9.0.13/endorsed is not supported. Endorsed
  16. Linux下time/timestamp相关。
  17. IDEA解决开两个窗口问题
  18. 回波损耗、插入损耗、反射系数等概念
  19. 进军餐饮行业,店铺该如何选址?
  20. 为何线下支付更多人选择微信而不是支付宝?

热门文章

  1. 解决Chorme使用google搜索结果无法打开的问题
  2. 有一架天平12个小球,其中有11个重量相同,1个与另外11个不同(不清楚这个球是轻还是重),要求最多称3次,就可以将其中重量特殊的小球找出来。
  3. 用python处理excel 数据分析_数据分析---用python处理excel
  4. 中职计算机应用专业(云计算方向)建设实践
  5. 详解AUTOSAR:Green Hills Software(GHS)编译下载瑞萨RH850程序(环境配置篇—2)
  6. 复变函数笔记——解析函数、柯西-黎曼方程
  7. element单独选择年或年月或年月日以及起止日期使用el-date-picker
  8. 使用STM8单片机+NTC热敏电阻自制简易温度巡检仪
  9. Python大疆相片/航片/照片的内容信息获取:以m300为例JPG
  10. webstorm 扩大内存