VisualVM介绍使用

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

 


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

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

 

  1.  PID -- 程序启动后的进程号,在命令行中可以用 jps命令查看
  2.  主机 -- 如果是本机的话显示,localhost,如果是远程主机应该是显示远程主机的主机名或者IP
  3.  主类 -- 程序入口类(main方法所在的类)
  4.  参数 -- VisualVm 启动的时候使用的一些配置文件路径
  5.  JVM -- jvm类型
  6.  Java -- jdk的版本信息
  7.  Java Home -- JDK安装目录
  • JVM参数 -- VisualVm 启动时候设置的JVM参数
  •  系统属性 -- java环境的系统参数

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

 

  1.   CPU -- 展示java程序运行的时候占用的cpu资源 如下图中橙色的表示程序运行使用的cpu资源百分比,蓝色部分表示垃圾回收占用CPU资源百分比
  2.   堆 -- 这里要说明下堆内存的组成部分,堆是由老年代和新生代组成,其中新生代有由"伊甸园"和"两个幸存区组成"三部分组成,堆视图看到的资源占用实际是"老年代"、"伊甸园(Eden)"、"两个幸存者(Survivor )"的一个综合情况。
  3.   PermGen --  Perm 区用来存放java类以及其他虚拟机自己的静态数据,(常被称为持久代或者方法区)
  4.   类 -- 此视图 主要展示 当前程序加载了多少个类
  5.   线程 -- 当前程序的线程启动情况
  •   执行垃圾回收 -- 手动触发一次GC 相当于在程序代码中调用(System.gc()),如果是远程连接到生产环境中请慎重点击。
  •   堆Dump -- 生产当前程序的内存快照hprof文件,对于分析内存溢出问题比较有帮助。(可以查看当前程序内存中的所有对象)

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

  1.   线程dump – 此按钮主要生产当前程序中所有线程的快照(对分析线程死锁,比较有帮助)
  2.   时间线 – 展示每个线程的实时运行状态(不同颜色代表不同的状态)
  3.   表 – 按照二维表格的形式展示每个线程不同状态的时间统计信息
  4.   详细信息 – 用饼图展示每个线程的运行状态

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

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

 

 

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

 

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

 

 

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

 

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

 

6    增加VisualGC插件

Java VisualVM默认没有安装Visual GC插件,需要手动安装JDK的安装目录的bin目露下双击jvisualvm.exe,即可打开Java VisualVM,点击菜单栏 工具->插件 安装Visual GC

技术分享

 

 

安装完成后重启Java VisualVM,Visual GC界面自动打开,即可看到JVM中堆内存的分代情况

技术分享

 

 

被监控的程序运行一段时间后Visual GC显示如下

技术分享

 

要看懂上面的图必须理解Java虚拟机的一些基本概念:

堆(Heap) :JVM管理的内存叫堆


分代:根据对象的生命周期长短,把堆分为3个代:Young,Old和Permanent,根据不同代的特点采用不同的收集算法,扬长避短也。

  1. Young(年轻代)
    年轻代分三个区。一个Eden区,两个Survivor区。大部分对象在Eden区中生成。当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当这个Survivor区满时,此区的存活对象将被复制到另外一个Survivor区,当这个Survivor去也满了的时候,从第一个Survivor区复制过来的并且此时还存活的对象,将被复制“年老区(Tenured)”。需要注意,Survivor的两个区是对称的,没先后关系,所以同一个区中可能同时存在从Eden复制过来对象,和从前一个Survivor复制过来的对象,而复制到年老区的只有从第一个Survivor复制过来的对象。而且,Survivor区总有一个是空的。

  2. Tenured(年老代)
    年老代存放从年轻代存活的对象。一般来说年老代存放的都是生命期较长的对象。

  3. Perm(持久代)
    用于存放静态文件,如今Java类、方法等。持久代对垃圾回收没有显著影响,但是有些应用可能动态生成或者调用一些class,例如Hibernate等,在这种时候需要设置一个比较大的持久代空间来存放这些运行过程中新增的类。持久代大小通过-XX:MaxPermSize=进行设置。

 

GC的基本概念

gc分为full gc 跟 minor gc,当每一块区满的时候都会引发gc。

  1. Scavenge GC
    一般情况下,当新对象生成,并且在Eden申请空间失败时,就触发了Scavenge GC,堆Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor区。然后整理Survivor的两个区。

  2. Full GC
    对整个堆进行整理,包括Young、Tenured和Perm。Full GC比Scavenge GC要慢,因此应该尽可能减少Full GC。有如下原因可能导致Full GC:

  • 上一次GC之后Heap的各域分配策略动态变化

  • System.gc()被显示调用

  • Perm域被写满

  • Tenured被写满

 

内存溢出  out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。

内存泄露  memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。其实说白了就是该内存空间使用完毕之后未回收。

 

转载于:https://www.cnblogs.com/lizhen-home/p/7727536.html

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

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

相关文章

Java功能的适用性

Java语言和标准库功能强大,但功能强大, 责任重大 。 一方面看到很多用户代码滥用或滥用稀有的Java功能,另一方面却完全忘记了大多数基本功能之后,我决定撰写此摘要。 这不是每个Java开发人员都应该探索,了解和使用的要…

台达b3伺服modbus通讯_【数控系统】台达伺服压机控制灵活 精准压合满足各种工序需求...

引言压机是一种利用压力改变工件形状的机械设备。随着制造业少量多样与客制化的日趋发展,压机的的优势逐渐显现,在汽车、五金与电子制造等产业中的应用不断增多。传统压机在使用操作上耗费人力并需要诸多压机元件才能完整运作,维修成本高&…

yolov4Linux,基于Darknet的YOLOv4目标检测

目录一、Windows环境下的YOLOv4目标检测1、环境配置环境准备:Win10、CUDA10.1、cuDNN7.65、Visual Studio 2019、OpenCV 3.4(1)Visual Studio2019企业版安装(3)下载并安装CUDA10.1,下载安装cuDNN7.65对于cudnn直接将其解开压缩包,然后需要将b…

二元置信椭圆r语言_医学统计与R语言:圆形树状图(circular dendrogram)

微信公众号&#xff1a;医学统计与R语言如果你觉得对你有帮助&#xff0c;欢迎转发输入1&#xff1a; "ggraph")结果1&#xff1a; name 输入2&#xff1a; <- graph_from_data_frame(myedges1, verticesmyvertices,directed T)ggraph(mygraph, layout dend…

Java:检查器框架

我在JavaOne 2012上 了解的有趣的工具之一是Checker Framework 。 Checker Framework的网页之一 指出 &#xff0c;Checker Framework“增强了Java的类型系统&#xff0c;使其更强大&#xff0c;更有用”&#xff0c;从而使软件开发人员“能够检测并防止Java程序中的错误”。 查…

南岸焊接机器人厂_造船三部高效焊接工艺技术年鉴

为了提升公司高效焊自动化率&#xff0c;实现降本增效目标&#xff0c;造船事业三部积极响应公司领导号召&#xff0c;充分挖掘自身资源&#xff0c;2020年&#xff0c;在高效焊接技术、设备开发研究等方面&#xff0c;不断创新、敢于突破&#xff0c;获取了多项焊接新技术、新…

线性回归csv数据集_测试数据科学家线性回归的30个问题

你的目标是数据科学家吗&#xff1f;那你对线性回归了解有多深入呢&#xff0c;下面的30道题&#xff0c;可以帮助你或者测试别人是否真的达到的数据科学家的水平&#xff0c;关注回复&#xff0c;答案在评论区&#xff1a;1)是非题&#xff1a;线性回归是一种受监督的机器学习…

dw空心圆项目符号_如何懂建筑施工图?搞懂这些符号解析,耐下性子研究不会学不会...

施工图纸一个建筑方向&#xff0c;是房屋建筑的依据&#xff0c;更是一种工程语言&#xff0c;它能够明确的规定出我们建造出怎样的建筑&#xff0c;看懂它是入行基础。当然建筑图包含的因素比较多&#xff0c;有具体的建筑符号&#xff0c;尺寸、做法以及技术要求都在里面&…

canvas学习和滤镜实现

最近学习了 HTML5 中的重头戏--canvas。利用 canvas&#xff0c;前端人员可以很轻松地、进行图像处理。其 API 繁多&#xff0c;这次主要学习常用的 API&#xff0c;并且完成以下两个代码&#xff1a;实现去色滤镜实现负色(反色)滤镜 欢迎入群&#xff1a;857989948 。IT 技术深…

android代码混淆作用,Android分享:代码混淆那些事

1) 前言ProGuard是一个开源的Java代码混淆器。它可以混淆Android项目里面的java代码&#xff0c;对的&#xff0c;你没看错&#xff0c;仅仅是java代码。它是无法混淆Native代码&#xff0c;资源文件drawable、xml等。2) ProGuard作用压缩: 移除无效的类、属性、方法等优化: 优…

施工部署主要不包括_建筑工程施工方案及培训实例

[南京]大型土石方工程施工方案本资料为[南京]大型土石方工程施工方案格&#xff0c;共43页。内容简介&#xff1a;本工程位于南京化工园内&#xff0c;扬子玉带扬巴路附近&#xff0c;工程项目为江苏成品油管道配设施扬子玉带油库套油库工程&#xff0c;由中国石化股份有限公司…

java第六次作业

《Java技术》第六次作业 &#xff08;一&#xff09;学习总结 1.用思维导图对本周的学习内容进行总结。 2.当程序中出现异常时&#xff0c;JVM会依据方法调用顺序依次查找有关的错误处理程序。可使用printStackTrace 和getMessage方法了解异常发生的情况。阅读下面的程序&#…

华为鸿蒙不再孤,华为鸿蒙OS系统不再孤单!又一款国产系统启动内测:再掀国产替代化...

【5月10日讯】相信大家都知道&#xff0c;备受广大花粉们期待的鸿蒙OS系统终于开始推送公测版本了&#xff0c;并且适配机型也开始不断地增多&#xff0c;而根据华为官方最新消息&#xff0c;华为鸿蒙OS系统将会在6月份开始大规模推送正式版鸿蒙系统&#xff0c;这无疑将会成为…

CSS 水平垂直居中

方法一&#xff1a; 容器确定宽高&#xff1a;知识点&#xff1a;transform只能设置在display为block的元素上。 <head> <meta charset"UTF-8"> <title>Title</title> <style type"text/css"> #container{…

linux怎么进入文件夹_Linux基础命令《上》

上一节介绍了VMware中安装centos7以及克隆系统&#xff0c;之中用到的几个命名还都是开发不常用的&#xff0c;这节课就准备讲解一下入门的Linux命名&#xff0c;都是日常使用的。首先呢&#xff0c;我们进入系统后&#xff0c;得先知道我是谁&#xff0c;我在哪儿&#xff1f;…

UML学习(一)-----用例图

1、什么是用例图 用例图源于Jacobson的OOSE方法&#xff0c;用例图是需求分析的产物&#xff0c;描述了系统的参与者与系统进行交互的功能&#xff0c;是参与者所能观察和使用到的系统功能的模型图。它的主要目的就是帮助开发团队以一种可视化的方式理解系统的功能需求&#xf…

首款鸿蒙系统终端n,荣耀智慧屏正式发布,首款搭载鸿蒙系统终端,家庭C位新选择...

原标题&#xff1a;荣耀智慧屏正式发布&#xff0c;首款搭载鸿蒙系统终端&#xff0c;家庭C位新选择智能手机的普及率越来越高&#xff0c;其所能够承担的功能也越来越多&#xff0c;电视机对于很多中青年的用户来讲&#xff0c;更多的时候就是个摆设。在家庭中&#xff0c;看电…

oracle如何保证数据一致性和避免脏读

oracle通过undo保证一致性读和不发生脏读 1.不发生脏读2.一致性读3. 事务槽&#xff08;ITL&#xff09;小解1.不发生脏读 例如&#xff1a;用户A对表更新了&#xff0c;没有提交&#xff0c;用户B对进行查询&#xff0c;没有提交的更新不能出现在用户的查询结果中 举例并通个d…

Google Guava BloomFilter

当Guava项目发布版本11.0时&#xff0c;新添加的功能之一是BloomFilter类。 BloomFilter是唯一的数据结构&#xff0c;用于指示元素是否包含在集合中。 使BloomFilter有趣的是&#xff0c;它将指示元素是否绝对不包含或可能包含在集合中。 永远不会出现假阴性的特性使BloomFil…

php 编程祝新年快乐_用于测试自动化的7种编程语言

导读&#xff1a;本文重点介绍测试自动化中排名前七位的编程语言。当人们想要开始做自动化测试&#xff0c;此时却需要开发自动化测试脚本&#xff0c;也就是要学习一门编程语言。那么&#xff0c;我们怎样迈出这一步&#xff1f;也有你已经精通一种编程语言&#xff0c;也可以…