细述 Java垃圾回收机制→Java Garbage Collection Monitoring and Analysis

Java垃圾回收监控和分析工具

  • Java VisualVM
  • Naarad
  • GCViewer
  • IBM Pattern Modeling and Analysis Tool for Java Garbage Collector
  • HPjmeter
  • IBM Monitoring and Diagnostic Tools for Java – Garbage Collection and Memory
  • Visualizer
  • Verbose GC Analyzer

Java VisualVM

Java VisualVM是在Java SE SDK安装时免费提供的。看下你的Java JDK安装目录下的/bin目录,Javajdk1.8.0bin。此目录下有许多其他工具包括javac和java工具,jvisualvm就是其中一个。

Java VisualVM对运行中的Java应用提供了可视化的信息展示。它是很多工具的整合包,像工具JConsole,jstat,jinfo,jstack以及jmap现在都是Java VisualVM的一部分。

Java VisualVM可以用来 - 生成和分析堆内存的dump - 观察和操作MBeans - 监控垃圾回收 - 内存和CPU性能分析

Launch VisualVM

jvisualvm已经包含在了JDK的bin目录下,如果以设置环境变量path,则可以直接在命令行中运行jvisualvm,将出现如下启动界面



安装Visual GC插件

我们需要安装visual GC 插件才能有个堆Java GC线程的漂亮和有价值的视觉感受。在上面的启动界面中点击工具->插件->可用插件->Visual GC

(不知道什么原因,这张图片就是上传不成功,只有附上外链地址将就看了,抱歉)

安装。

监控GC

现在可以监控垃圾回收过程了。开启你的Java应用程序,Java VisualVM会自动检测并将其显示到界面上。在左边“应用程序”面板的“本地”节点下面,所有本地运行的Java应用都会被列举出来。

Java VisualVM自己本身也是一个Java应用程序,因此它自身也被列了出来。作为本文的目的我们将监控VisualVM应用本身的GC过程。

双击“本地”节点下的VisualVM图标。

这样应用程序的监控面板会在右边打开。面板上有多个标签,每个里面展示了与应用程序性能相关的方面。由于我们现在主要关注“Visual GC”,so,点之。

上面的图片显示了Old,Eden,S0,S1使用的内存空间。下面的图表显示了各个部分申请和释放内存的详细信息。它以设定的刷新频率不停地跟新。

上图显示的是一个正常运行的程序。当发生内存泄露或者不正常的操作时,可以从图形本身明显地看出来。至少我们可以知道程序中存在和对象内存分配和垃圾回收相关的问题。然后利用其他标签如“Threads”中提供的信息和Thread
Dump我们可以缩小发生问题的范围。

在“监视”标签中,我们可以看到以时间线发展的内存使用概况图。这里有个“执行垃圾回收”按钮可以调用垃圾回收过程。

在“抽样器”标签中我们可以开始内存和CPU分析工作。抽样器会实时显示各个实例的使用情况。它可以帮助确定性能问题到底发生在哪里。

到此为止,关于Java 垃圾回收的系列文章已经完结了。

作者:anonymoussf

来源:51CTO

时间: 2024-12-22 17:41:38

细述 Java垃圾回收机制→Java Garbage Collection Monitoring and Analysis的相关文章

细述 Java垃圾回收机制→Java Garbage Collection Introduction

计划写一个介绍Java垃圾回收基础的系列文章,共分四部分: Java垃圾回收简介 Java垃圾回收器是如何工作的? 各种类型的Java垃圾回收器 Java垃圾回收的监控和分析 本文是这个系列的第一篇文章,这篇文章将会介绍一些基本术语,如:JDK,JVM,JRE,HotSpot VM,以及理解JVM的架构和Java堆内存结构.在开始学习Java垃圾回收机制之前确实有必要了解一下这些基本东西. 关键的Java术语 Java API–一个帮助程序员创建Java应用的打包好的库集合 Java Devel

java垃圾回收机制-java堆中方法区中的内容会被删除么

问题描述 java堆中方法区中的内容会被删除么 java有垃圾回收机制,会自动回收不使用的对象,问题一:那在堆中的方法区中存储的关于类的代码以及常量池等这些信息会, 在不使用这个类以后,这些信息是会被销毁么?怎样被销毁呢?是由GC回收么?问题二:栈中自动分配的存储的对象引用会被自动销毁么?代码运行之后销毁么? 解决方案 堆上没有什么方法区.代码放在代码区,函数的局部变量放在堆栈上.栈中自动分配的存储的对象引用会被自动销毁么,是的,在函数返回的时候销毁.

浅谈PHP5中垃圾回收算法(Garbage Collection)的演化

前言:PHP是一门托管型语言,在PHP编程中程序员不需要手工处理内存资源的分配与释放(使用C编写PHP或Zend扩展除外),这就意味着PHP本身实现了垃圾回收机制(Garbage Collection).现在如果去PHP官方网站(php.net)可以看到,目前PHP5的两个分支版本PHP5.2和PHP5.3是分别更新的,这是因为许多项目仍然使用5.2版本的PHP,而5.3版本对5.2并不是完全兼容.PHP5.3在PHP5.2的基础上做了诸多改进,其中垃圾回收算法就属于一个比较大的改变.本文将分别

[JVM]成为JavaGC专家(1)—深入浅出Java垃圾回收机制

对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何工作可以帮你写出更好的Java应用. 这仅仅代表我个人的意见,但我坚信一个精通GC的人往往是一个好的Java开发者.如果你对GC的处理过程感兴趣,说明你已经具备较大规模应用的开发经验.如果你曾经想过如何正确的选择GC算法,那意味着你已经完全理解你所开发的应用的特点.当然,我们不能以偏概全,这不能作为评价一个好的开发人员的共通标准.但是,我要说的是,深入理解GC是成为一名伟

收集器-java垃圾回收机制怎么回收变量

问题描述 java垃圾回收机制怎么回收变量 如下: 1.Object aobj=new Object() 2.Object bobj = new Object() 3. Object cobj = new Object() 4.aobj = bobj; 5.aobj = cobj; 6.cobj = null; 7.aobj = null; 那么第几行的obj符合垃圾收集器的收集标准. A:1 B:2 C:3 D:4 E:5 F:6 G:7 垃圾收集器的收集标准是什么? 是不是不引用了就可以收集

Java垃圾回收机制中对象引用遍历的实现原理

问题描述 有没有大牛给详细解释下Java垃圾回收机制中对象引用遍历的实现原理,java回收机制中的有向图是何时建立.如何建立,有向图有几个? 解决方案 解决方案二:垃圾回收在jvm中并没有特定的算法,不同的人可以有不同的实现,未必会使用有向图譬如一种实现可以这样,在没有内存可分配时,直接抛出OutOfMemory都是符合规范的解决方案三:该回复于2011-04-07 11:01:48被版主删除解决方案四:这个要讲的话就多了解决方案五:有本书好像叫深入JVM,你可以找一下,里面解释的很详细解决方案

细述 Java垃圾回收机制→How Java Garbage Collection Works?

这是垃圾回收机制系列文章的第二篇.希望您已经读过了第一部分Java垃圾回收简介. Java垃圾回收是一个自动运行的管理程序运行时使用的内存的进程.通过GC的自动执行JVM将程序员从申请和释放内存的繁重操作中解放出来. Java垃圾回收GC初始化 作为一个自动执行的进程,程序员不需要在代码中主动初始化GC.Java提供了System.gc()和Runtime.gc()这两个hook来请求JVM调用GC进程. 尽管要求系统机制给程序员提供调用GC的机会,但是实际上这是由JVM负责决定的.JVM可以选

细述 Java垃圾回收机制→Types of Java Garbage Collectors

本文将会介绍各种不同类型的Java垃圾回收器.垃圾回收是Java用来将程序员从分配和释放内存的琐事中解放出来的自动过程. Java有四种类型的垃圾回收器, Serial Garbage Collector Parallel Garbage Collector CMS Garbage Collector G1 Garbage Collector 这四种类型的垃圾回收器都有各自的优点和缺点.最重要的是程序员可以选择JVM使用哪种类型的垃圾回收器.我们可以通过传递不同的JVM参数来设置使用哪一个.各个

java垃圾回收机制

Java的堆是一个运行时数据区,类的实例(对象)从中分配空间.Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new.newarray.anewarray和multianewarray等指令建立,但是它们不需要程序代码来显式地释放.一般来说,堆的是由垃圾回收 来负责的,尽管JVM规范并不要求特殊的垃圾回收技术,甚至根本就不需要垃圾回收,但是由于内存的有限性,JVM在实现的时候都有一个由垃圾回收所管理的堆.垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引