Java GC系列(4):垃圾回收监视和分析
转载自 Java GC系列(4):垃圾回收监视和分析
在这个Java GC系列教程中,让我们学习用于垃圾回收监视和分析的工具。然后,选用一种工具来监视一个Java示例程序的垃圾回收过程。如果你是一名初学者,你最好仔细阅读该系列教程。你可以从这里(垃圾回收介绍)开始。
Java GC监视和分析工具
下面是一些可用的工具,每个都有自己的优势和缺点。我们可以通过选择正确的工具并分析,来提升应用程序的性能。这篇教程中,我们选用Java VisualVM。
- 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文件夹中(路径:\Java\jdk1.8.0\bin),这里面有很多javac和java工具,jvisualvm就是其中之一。
Java VisualVM能够被用于:
- 生成并分析堆的内存转储;
- 在MBeans上观察并操作;
- 监视垃圾回收;
- 内存和CPU性能分析;
1、启动VisualVM
jvisualvm位于JDK bin文件夹下,直接点击就可以。
在这个Java GC系列教程中,让我们学习用于垃圾回收监视和分析的工具。然后,选用一种工具来监视一个Java示例程序的垃圾回收过程。如果你是一名初学者,你最好仔细阅读该系列教程。你可以从这里(垃圾回收介绍)开始。
Java GC监视和分析工具
下面是一些可用的工具,每个都有自己的优势和缺点。我们可以通过选择正确的工具并分析,来提升应用程序的性能。这篇教程中,我们选用Java VisualVM。
- 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文件夹中(路径:\Java\jdk1.8.0\bin),这里面有很多javac和java工具,jvisualvm就是其中之一。
Java VisualVM能够被用于:
- 生成并分析堆的内存转储;
- 在MBeans上观察并操作;
- 监视垃圾回收;
- 内存和CPU性能分析;
1、启动VisualVM
jvisualvm位于JDK bin文件夹下,直接点击就可以。
2、安装可视化GC插件
我们需要安装可视化GC插件,以便在Java GC过程中有良好的视觉感受。
3、监视GC
现在,是时候监视垃圾回收进程了,开启你的Java程序,它将自动被检测到并显示到Java VisualVM界面,左侧“Application”(应用程序)窗口下,“Local”(本地节点)下,所有本地运行的Java程序都会被列出。
Java VisualVM是一个Java应用程序,因此它也会被列在其中,教程的意图在于使用VisualVM来监视它自己的GC进程。
双击“Local”(本地)下的VisualVM图标。
现在,程序监控窗口在右侧打开,这有许多不同关于应用程序性能的相关监视指数的tab页,目前为止,我们最感兴趣的是“Visual GC”,点击它。
上面图片显示在Old、Eden、S0和S1上空间利用情况,下图显示了每部分空间的分配和释放情况。它按照指定的刷新率保持持续刷新。
上面图片所展示的是正常运行程序的情况,当出现内存泄露或者反常的行为时,它会在图表中明确的显示出来。最少我们能理解他是与对象内存分配和垃圾回收相关的事情。随后,通过其他tab页(像“Threads”)和Thread Dump的帮助,我们能够减少这个问题。
在“Monitor”tab页中,我们能够监控并定时展示所有堆内存使用情况图。通过“Perform GC”按钮可以启动垃圾回收进程。
在“Sampler”tab页中,我们能够启动内存和CPU性能分析,它将显示详细每个实例使用的实时报告,它将帮助我们明确性能问题。
这篇教程是我们四篇Java垃圾回收系列教程的最后一篇。
2、安装可视化GC插件
我们需要安装可视化GC插件,以便在Java GC过程中有良好的视觉感受。
3、监视GC
现在,是时候监视垃圾回收进程了,开启你的Java程序,它将自动被检测到并显示到Java VisualVM界面,左侧“Application”(应用程序)窗口下,“Local”(本地节点)下,所有本地运行的Java程序都会被列出。
Java VisualVM是一个Java应用程序,因此它也会被列在其中,教程的意图在于使用VisualVM来监视它自己的GC进程。
双击“Local”(本地)下的VisualVM图标。
现在,程序监控窗口在右侧打开,这有许多不同关于应用程序性能的相关监视指数的tab页,目前为止,我们最感兴趣的是“Visual GC”,点击它。
上面图片显示在Old、Eden、S0和S1上空间利用情况,下图显示了每部分空间的分配和释放情况。它按照指定的刷新率保持持续刷新。
上面图片所展示的是正常运行程序的情况,当出现内存泄露或者反常的行为时,它会在图表中明确的显示出来。最少我们能理解他是与对象内存分配和垃圾回收相关的事情。随后,通过其他tab页(像“Threads”)和Thread Dump的帮助,我们能够减少这个问题。
在“Monitor”tab页中,我们能够监控并定时展示所有堆内存使用情况图。通过“Perform GC”按钮可以启动垃圾回收进程。
在“Sampler”tab页中,我们能够启动内存和CPU性能分析,它将显示详细每个实例使用的实时报告,它将帮助我们明确性能问题。
这篇教程是我们四篇Java垃圾回收系列教程的最后一篇。
Java GC系列(4):垃圾回收监视和分析相关推荐
- java gc 可达性_JAVA--GC 垃圾回收机制----可达性分析算法
在JVM 中,java 为我们提供可有效的垃圾回收机制,GC ,GC的创建无疑是为了缓解内存压力.保存有效数据.回收垃圾无效数据: 在此之前GC在我的理解中,一直只是个概念,内存中出现垃圾,GC来回收 ...
- 【Java 虚拟机原理】垃圾回收算法 ( 可达性分析算法 | GC Root 示例 | GC 回收前的两次标记 | finalize 方法示例 )
文章目录 一.可达性分析算法 二.GC Root 示例 三.GC 回收前的两次标记 四.finalize 方法示例 一.可达性分析算法 在 堆内存 中 , 存在一个 根对象 GC Root , GC ...
- Java GC系列(1):Java垃圾回收简介
转载自 Java GC系列(1):Java垃圾回收简介 这篇教程是系列第一部分.首先会解释基本的术语,比如JDK.JVM.JRE和HotSpotVM.接着会介绍JVM结构和Java 堆内存结构.理解 ...
- Java GC系列(2):Java垃圾回收是如何工作的
转载自 Java GC系列(2):Java垃圾回收是如何工作的 本教程是为了理解基本的Java垃圾回收以及它是如何工作的.这是垃圾回收教程系列的第二部分.希望你已经读过了第一部分:<Java ...
- 精华推荐 | 【JVM深层系列】「GC底层调优系列」一文带你彻底加强夯实底层原理之GC垃圾回收技术的分析指南(GC原理透析)
前提介绍 很多小伙伴,都跟我反馈,说自己总是对JVM这一块的学习和认识不够扎实也不够成熟,因为JVM的一些特性以及运作机制总是混淆以及不确定,导致面试和工作实战中出现了很多的纰漏和短板,解决广大小伙伴 ...
- Java基础知识强化83:System类之gc()方法(垃圾回收)以及和finalize()区别
1. System概述: System类包含一些有用的类字段和方法.它不能被实例化. 2. gc()方法:垃圾回收器 1 public static void gc() 调用gc方法暗示着 ...
- java stw_聊聊JAVA GC系列(6) - STW
上回介绍了"平平无奇"的标记清除算法却是JAVA GC的灵魂, 介绍的过程中留下了几个问题, 其中一个问题是: 标记清除算法正在运行时各个对象的依赖关系发生了变化怎么办? 我们先假 ...
- java整段标记_聊聊JAVA GC系列(7) - 标记整理算法
在介绍"平平无奇"的标记清除算法时, 还留下了另一个问题, 就是内存碎片的问题. 内存碎片的问题是指, 每次回收的内存都是比较分散的, 可以加起来是一个比较大的数值, 但是由于可用 ...
- java 虚拟机 Java内存结构 JVM垃圾回收机制算法
什么是HotSpot VM 提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机. 但不一定所有人都知道的是, ...
最新文章
- 自查自纠 | 线性回归,你真的掌握了嘛?
- spring scope=prototype 学习笔记
- Leetcode 223. 矩形面积 解题思路及C++实现
- 如何获取空对象的类型
- 这个代码应该怎么写???
- npm 全局安装vuecli报错_前端脚手架CLI生成模版命令工具(包括,npm包的发布,脚手架的搭建,注意事项,优化等)...
- Jmeter插件-dubbo
- 快速开发框架工作笔记002---项目开发中整理_整合好的_Netty高并发处理快速开发框架_Netty快速开发框架
- python面向对象的含义_Python面向对象(一)
- tenorflow+python程序打包成.exe(收集方法1)
- 从壹开始前后端分离 [ vue + .netcore 补充教程 ] 三十║ Nuxt实战:动态路由+同构...
- MySQL chartset
- Python如何使用生成器得到斐波那契数列
- EventBus BackgroundPoster原理解析
- Java web技术及应用答案_超星《Java Web应用开发技术》答案
- 2016 英语作文二
- iPhone 计算机 桌面,2分钟学会Windows仿苹果任务栏,你的电脑桌面也可如此炫酷!...
- 解决win8无法使用内置管理员账户打开
- AndroidStudio haxm installer win10安装失败问题建议
- 阿里云的混合云战略,凭啥扯上Zstack?