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,一经查实,立即删除!

相关文章

c语言奇葩错误,6个奇葩的(hello,world)C语言版(转)

//下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C的编译器用才能编译通过。//程序功能输出 Hello,world!01.c#define _________ }#define ________ putchar#define _______ main#define _(a) ________(a);#define ______ _______(){#define __ _____…

Java功能的适用性

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

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

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

Binary Agents(二进制值转换字符串)

题目&#xff1a; 传入二进制字符串&#xff0c;翻译成英语句子并返回。 二进制字符串是以空格分隔的。 代码&#xff1a; 1 function binaryAgent(str) {2 var arr str.split( );3 for (var i 0; i < arr.length; i) {4 arr.splice(i,1,String.fromCharCode(BtoD…

我对CSS选择器的认识

我对CSS选择器的认识 一、简述   CSS选择器是对HTML元素进行选择的筛选条件&#xff0c;大概可以分为两类&#xff1a; 特征选择器——根据元素自身所具有的某种特征进行筛选&#xff0c;比如名称、ID、属性等&#xff1b;关系选择器——根据元素与其他元素的关系进行筛选&…

【USACO2006 Mar】滑雪缆车 skilift

【USACO2006 Mar】 滑雪缆车 skilift Time Limit 1000 msMemory Limit 131072 KBytes Description 科罗拉多州的罗恩打算为奶牛建造一个滑雪场&#xff0c;为此要在山上规划一条缆车线路。 整座山可以用一条折线来描述&#xff0c;该折线有N个拐点&#xff0c;起点是1&#xff…

yolov4Linux,基于Darknet的YOLOv4目标检测

目录一、Windows环境下的YOLOv4目标检测1、环境配置环境准备&#xff1a;Win10、CUDA10.1、cuDNN7.65、Visual Studio 2019、OpenCV 3.4(1)Visual Studio2019企业版安装(3)下载并安装CUDA10.1&#xff0c;下载安装cuDNN7.65对于cudnn直接将其解开压缩包&#xff0c;然后需要将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;获取了多项焊接新技术、新…

软工Hello World!团队第二周博客汇总

2017.10.20-2017.10.26 Scrum会议&#xff1a; 第一天&#xff1a;http://www.cnblogs.com/liusx0303/p/7704482.html 第二天&#xff1a;http://www.cnblogs.com/Mingezi/p/7709472.html 第三天&#xff1a;http://www.cnblogs.com/lynlyn/p/7717275.html 第四天&#xff1a;h…

什么是css sprites,如何使用?

css sprites&#xff1a;精灵图&#xff08;雪碧图&#xff09;&#xff1a;把一堆小图片整合在一张大图上&#xff0c;通过背景图片相关设置&#xff08;背景图片、背景图是否重复、背景图定位&#xff09;&#xff0c;显示图片&#xff0c;减轻服务器对图片的请求数量 优点&…

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

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

linux调试crontab,linux - crontab 的调试,启动thin服务器

linux - crontab 的调试&#xff0c;启动thin服务器2018-11-18 17:10访问量: 1059分类&#xff1a;技术参考&#xff1a;https://askubuntu.com/questions/56683/where-is-the-cron-crontab-log日志默认位置在 /var/log/syslog 中。 grep CRON 。 如果没有安装MTA的话(例如 mai…

番石榴前提条件课

编写过很多Java文章的人可能都编写了以条件为开头的方法&#xff0c;这些条件可以在继续进行该方法的其余实现之前&#xff0c;先验证提供的参数或要操作的对象的状态。 这些会增加方法的冗长性&#xff0c;有时&#xff0c;尤其是在有多个检查的情况下&#xff0c;几乎会淹没该…

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

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

子域名查询技术

子域名查询是渗透测试中的重要一环&#xff0c;收集尽可能多的子域名就是尽可能地扩大我们的攻击面和了解网络内部结构。 子域名保存位置利用点具体用法DNS服务器区域传送漏洞dig ns.dnsdomain.com target.com axfr主站链接网站爬虫百度site:target.com被动解析字典枚举解析fie…

Dashboard集群

#Dashboard集群 openstack pike 部署 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html ##8.Dashboard集群#####在controller1安装配置#安装 yum install openstack-dashboard -y#配置 cp /etc/openstack-dashboard/local_settings{,.bak} #egrep -v #|^$ /etc/openstack-…

canvas学习和滤镜实现

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

python 数据分析库_五个 Python 常用数据分析库

前言 Python 是常用是数据分析工具&#xff0c;常用的数据分析库有很多&#xff0c;下面主要介绍如下五个分析库&#xff1a;NumPy、Pandas、SciPy、StatsModels、Matplotlib。 NumPy 是一个非常常用的数据分析库&#xff0c;更准确点说是一个数学计算库&#xff0c;包括下面的…