使用JProfiler进行内存分析
在最近的工作中,通过JProfiler解决了一个内存泄漏的问题,现将检测的步骤和一些分析记录下来,已备今后遇到相似问题时可以作为参考。
运行环境:
内存泄漏的现象:
使用JProfiler检查内存泄漏的步骤:
1. 初始化检验环境:
切换到“Live Memory-->All Objects”标签,可以看到当前tomcat中的对象情况,注意jprofiler其他版本可能位置不一样.

在执行操作前,需要先F4,运行“Run GC”,使jvm进行内存回收清理无效的对象.为了便于比较内存的增长情况,可以点击右键--->"Mark Current",
来将当前内存使用情况作为参照;点击后会显示“Difference”列,该列会列出对象数量的变化和变化比率

2.打开内存记录:
点击“Start Recordings”按钮,开始记录。执行这步的主要目的是为下面“Heap Walker”设置一个监控区间;如果不记录的话“Heap Walker”将分析jvm虚拟机的所有内存,即耗时又不能准确的发现内存泄漏的原因。
3. 执行操作,执行gc;
4. 关闭内存记录:
5. 找到增加迅速的对象类型,打开HeapWalker:
在视图中找到增长快速的对象类型,本例Concurrenthashmap的增长速度很快。在memory视图中找到Concurrenthashmap---点右键----选择“Show Selectiion In Heap Walker”,切换到HeapWarker 视图;切换前会弹出选项页面,注意一定要选择“Select recorded objects”,这样Heap Walker会在刚刚的那段记录中进行分析;否则,会分析tomcat的所有内存对象,这样既耗时又不准确;

6. 在HeapWalker中,找到泄漏的对象;


通过切换到References页签,可以看到这个类的具体对象实例。

为了在这些内存对象中,找到泄漏的对象(应该被回收),可以在该对象上点击右键,选择“Use Selected Instances”缩小对象范围;

单击OK按钮
7. 通过引用分析该对象:
incoming 表示显示这个对象被谁引用;
outcoming 表示显示这个对象引用的其他对象;



8. 通过创建分析该对象:

使用JProfiler进行内存分析的更多相关文章
- JProfiler进行Java运行时内存分析
原文地址:https://www.cnblogs.com/onmyway20xx/p/3963735.html 在最近的工作中,通过JProfiler解决了一个内存泄漏的问题,现将检测的步骤和一些分析 ...
- iOS app内存分析套路
iOS app内存分析套路 Xcode下查看app内存使用情况有2中方法: Navigator导航栏中的Debug navigator中的Memory Instruments 一.Debug navi ...
- 【Android端 APP 内存分析】使用工具进行APP的内存分析
Android端可以通过adb 命令直接获取内存信息,当然Android studio也提供了对内存的监控分析工具,并且后续可以结合MAT做分析 今天介绍的是通过Android studio和MAT工 ...
- Chrome开发者工具之JavaScript内存分析
阅读目录 对象大小(Object sizes) 对象的占用总内存树 支配对象(Dominators) V8介绍 Chrome 任务管理器 通过DevTools Timeline来定位内存问题 内存回收 ...
- Eclipse CDT Linux下内存分析 补记
常用工具汇总 http://www.ibm.com/developerworks/cn/linux/l-cn-memleak/ 常用的内存分析工具 http://en.wikipedia.org/wi ...
- c中的进制与内存分析
一. 进制 1. 什么是进制 l 是一种计数的方式,数值的表示形式 数一下方块的个数 汉字:十一 十进制:11 二进制:1011 八进制:13 l 多种进制:十进制.二进制.八进制.十六进制. ...
- [转载]JavaScript内存分析
https://github.com/CN-Chrome-DevTools/CN-Chrome-DevTools/blob/master/md/Performance-Profiling/javasc ...
- iOS开发——高级篇——内存分析,Instruments
一.内存分析 1.静态内存分析(Analyze)不运行程序,直接对代码进行内存分析,查看代码是否有内存泄露优点:分析速度快,并且可以对所有的代码进行内存分析缺点:分析结果不一定准确(没有运行程序,根据 ...
- 记一次Android内存分析过程
前言 上周五的时候,祝峰找到我,反映了Android收银台买单结果页内存飙升的问题.我在自己的机器上也试着重现了一下,发现从支付台-微信支付成功并返回后,进入买单结果页的内存会突然增大,导致GC,如图 ...
随机推荐
- Python(2.7.6) ConfigParser - 读写配置文件
Python 标准库的 ConfigParser 模块提供一套 API 来读取和操作配置文件. 配置文件的格式 a) 配置文件中包含一个或多个 section, 每个 section 有自己的 opt ...
- JQuery 性能优化
一.合适的选择器 JQuery 选择器提供丰富的选择器来定位DOM元素, 基本选择器 #id..class.element.*等:那他们哪个更高效呢? 第一选择: $("#id") ...
- win2008远程桌面卡顿和上传慢的解决方法
ibm服务器安装win2008server系统,发现远程桌面登陆特别卡,上传也慢的要死.下载没问题,这样初步判断网络没有问题. 打开注册表(regedit)找到: (1)打开HKEY_LOCAL_MA ...
- Meteor错误:TypeError: Meteor.userId is not a function
问题描述: 浏览器console提示错误TypeError: Meteor.userId is not a function. 原因分析: 通过查看Meteor API文档,可知该函数由包accoun ...
- java多线程总结六:经典生产者消费者问题实现
这是个线程同步的经典例子,源代码如下: <span style="font-size:16px;">package demo.thread; /** *经典生产者与消费 ...
- DEVMODE 结构体
typedef struct _devicemode { TCHAR dmDeviceName[CCHDEVICENAME]; //打印机(显示设备)名称 WORD dmSpecVersion; WO ...
- ASP.NET 5 初识
ASP.NET 5 是一个跨平台的全新框架,不再依赖IIS.下面介绍一下简单的Hello World 例子. 1. 安装kvm 用管理员权限打开cmd .如下图: 执行如下的脚本: @powershe ...
- 07_Java8新增的Lambda表达式
[Lambda表达式概述] Lambda表达式支持将代码块作为方法参数,Lambda表达式允许将使用简洁的代码来创建只有一个抽象方法的接口的实例.(这种接口称为函数式接口) [入门实例] packag ...
- OpenJudge 2795 金银岛
1.链接地址: http://bailian.openjudge.cn/practice/2795/ 2.题目: 总Time Limit: 3000ms Memory Limit: 65536kB D ...
- mysql---索引及explain的作用
索引:是一种数据结构,以增加存储开销和减慢DML(增.删.改)操作来提高查询速度. 常见的索引结构:btree索引(myisam,innodb,memory,heap),hash索引(memory,h ...