Jprofiler监控工具(内存泄漏)
- 内存泄漏
1、测试代码
- /**
- * JProfiler内存监控例子
- *
- * @author yhye
- * @2011-11-9上午09:46:06
- */
- public class JProfilerMemMain {
- private List<Integer> arr2 = null;
- // 方法执行完后无法释放Integer的数据内存
- public void test2() {
- arr2 = test();
- }
- // 方法执行完后释放Integer的数据内存
- public List<Integer> test() {
- List<Integer> arr = new ArrayList<Integer>();
- for (int i = 0; i < 200000; i++) {
- arr.add(i * 100);
- }
- return arr;
- }
- public static void main(String[] args) throws IOException {
- JProfilerMemMain jp = new JProfilerMemMain();
- for (int i = 1; i <= 10; i++) {
- jp.test2();
- // jp.test();
- }
- System.out.println("程序执行完毕");
- // 以下方法为保持程序处于活动状态
- char ch = ' ';
- while (ch != 'n') {
- ch = ch;
- }
- }
2、查看步骤
启动JProfiler,等程序打印出"程序执行完毕" 后查看如下,Integer对象有800264个
点击菜单上的按钮"Run GC" 执行垃圾回收后查看如下,Integer对象还有200270个
说明未完全释放数据,查看对象在堆的快照
从以下视图可以看到该对象的arr2属性有数据未释放
①Heap Walker->Biggest Objects
②Heap Walker->References,JProfilerMemMain对象自身占用空间16bytes,引用其他对象占空间4288kB
③Heap Walker->Data,中arr2属性有数据占用空间
- 死锁
1、测试代码
- package com.yyh.base.jprofile;
- /**
- * 死锁例子
- * @author yhye
- * @2011-11-8上午09:12:25
- */
- public class DeadlockMain implements Runnable {
- boolean flag;
- static Object o1 = new Object();
- static Object o2 = new Object();
- public void run() {
- System.out.println(flag);
- if (flag) {
- synchronized (o1) {
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- synchronized (o2) {
- System.out.println("AAA");
- }
- }
- } else {
- synchronized (o2) {
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- synchronized (o1) {
- System.out.println("BBB");
- }
- }
- }
- }
- public static void main(String[] args) {
- DeadlockMain aaa = new DeadlockMain();
- DeadlockMain bbb = new DeadlockMain();
- aaa.flag = true;
- bbb.flag = false;
- Thread thA = new Thread(aaa);
- thA.setName("线程AAA");
- Thread thB = new Thread(bbb);
- thB.setName("线程BB");
- thA.start();
- thB.start();
- }
- }
2、查看步骤
启动JProfiler,等程序执行一段时间后查看如下,线程AAA和线程BB出现阻塞
查看Thread Views-> Thread Monitor
①线程AAA的调用方的类和方法
②线程BB的调用方的类和方法
查看Thread Views-> Thread Dumps
①线程AAA的阻塞的代码位置
②线程BB的阻塞的代码位置
Jprofiler监控工具(内存泄漏)的更多相关文章
- 利用Java剖析工具JProfiler查找内存泄漏的方法
本文主要介绍如何如何利用在使用JProfiler时意识到内存泄漏以及查找内存泄漏的几种方法. 工具/原料 JProfiler 方法/步骤 JProfiler的内存视图会话提供了内存使用情况的动 ...
- 使用JProfiler进行内存分析
在最近的工作中,通过JProfiler解决了一个内存泄漏的问题,现将检测的步骤和一些分析记录下来,已备今后遇到相似问题时可以作为参考. 运行环境: Tomcat6,jdk6,JProfiler8 内存 ...
- [转载]Java应用程序中的内存泄漏及内存管理
近期发现测试的项目中有JAVA内存泄露的现象.虽然JAVA有垃圾回收的机制,但是如果不及时释放引用就会发生内存泄露现象.在实际工作中我们使用Jprofiler调用java自带的 jmap来做检测还是很 ...
- monkey检测内存泄漏
monkey中检查内存泄漏,实际上是对一个操作多次操作后看内存情况,内存泄漏具体的原理可百度,现在我们梳理检测内存泄漏的方法: 测试前你需要安装: 1.MAT分析工具 2.使用工具事实监控内存指标,现 ...
- Java内存泄漏分析系列之二:jstack生成的Thread Dump日志结构解析
原文地址:http://www.javatang.com 一个典型的thread dump文件主要由一下几个部分组成: 上图将JVM上的线程堆栈信息和线程信息做了详细的拆解. 第一部分:Full th ...
- 内存泄漏学习案例-1-ArrayList
解决 内存泄漏 于是赶快登陆探测服务器,首先是 top free df 三连,结果还真发现了些异常. 我们的探测进程 CPU 占用率特别高,达到了 900%. 我们的 Java 进程,并不做大量 CP ...
- 一次 Java 内存泄漏的排查
由来 前些日子小组内安排值班,轮流看顾我们的服务,主要做一些报警邮件处理.Bug 排查.运营 issue 处理的事.工作日还好,无论干什么都要上班的,若是轮到周末,那这一天算是毁了. 不知道是公司网络 ...
- JavaScript如何工作:内存管理+如何处理4个常见的内存泄漏
摘要: 作者将自己常用的JavaScript模块分享给大家. 原文:JavaScript如何工作:内存管理+如何处理4个常见的内存泄漏 作者:前端小智 Fundebug经授权转载,版权归原作者所有. ...
- JAVA内存泄漏解决办法
JVM调优工具 Jconsole,jProfile,VisualVM Jconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用.对垃圾回收算法有很详细的跟踪.详细说明参考这里 ...
随机推荐
- MySQL数据库事务各隔离级别加锁情况--read uncommitted篇(转)
本文转自https://m.imooc.com/article/details?article_id=17291,感谢作者 1.目的 1.1 合适人群 1.数据库事务特征我只是背过,并没有很深刻的理解 ...
- firedac二进制序列和JSON序列的对比
firedac二进制序列和JSON序列的对比 以同样大小的一个数据集的数据,作为测试的数据. 以JSON序列后的数据体积是4958字节. 以二进制序列后的数据体积是3044字节. 4958/3044= ...
- 正则表达式校验15/18位生份证-JAVA版
public static boolean isIDNumber(String iDNumber) { if (iDNumber == null || "".equals(iDNu ...
- UML:概要设计,用什么画我的类图?
背景 做过需求之后,很少使用 UML 画概要设计,这几天尝试的用了几个工具,最总还是选择了 VisualStudio. Edraw 详细信息很难编辑,如:签名. Viso 添加成员太麻烦了. Visu ...
- struts2必要的包
想正常使用struts2.1.6,至少需要如下6 个jar包: struts2-core-2.1.6.jar freemarker-2.3.13.jar commons-logging-1.0.4.j ...
- StatefulSet: Kubernetes 中对有状态应用的运行和伸缩
在最新发布的 Kubernetes 1.5 我们将过去的 PetSet 功能升级到了 Beta 版本,并重新命名为StatefulSet.除了依照社区民意改了名字之外,这一 API 对象并没有太大变化 ...
- HBase目录
1. HBase介绍及简易安装(转) 2. java操作Hbase实例 3. HBase入门基础教程之单机模式与伪分布式模式安装(转) 4. HBase教程 5. 用Java操纵HBase数据库(新建 ...
- 第四章 第一个rabbitmq程序
rabbitmq消息发送模型 要素: 生产者 消费者 交换器:生产者将消息发送到交换器 队列:交换器通过某种路由规则绑定到指定队列,将消息加入队列,消费者从队列消费消息 前提: 引入rabbitmq的 ...
- [leetcode]Populating Next Right Pointers in Each Node II @ Python
原题地址:https://oj.leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/ 题意: Follow up ...
- 一个执行Dos命令的窗口程序,与各位分享。
一个执行Dos命令的窗口程序,与各位分享. 效果图: 具体实现在代码中有详细的注释,请看代码. 实现执行CMD命令的核心代码(Cmd.cs): [csharp] using S ...