• 内存泄漏

1、测试代码

  1. /**
  2. * JProfiler内存监控例子
  3. *
  4. * @author yhye
  5. * @2011-11-9上午09:46:06
  6. */
  7. public class JProfilerMemMain {
  8. private List<Integer> arr2 = null;
  9. // 方法执行完后无法释放Integer的数据内存
  10. public void test2() {
  11. arr2 = test();
  12. }
  13. // 方法执行完后释放Integer的数据内存
  14. public List<Integer> test() {
  15. List<Integer> arr = new ArrayList<Integer>();
  16. for (int i = 0; i < 200000; i++) {
  17. arr.add(i * 100);
  18. }
  19. return arr;
  20. }
  21. public static void main(String[] args) throws IOException {
  22. JProfilerMemMain jp = new JProfilerMemMain();
  23. for (int i = 1; i <= 10; i++) {
  24. jp.test2();
  25. // jp.test();
  26. }
  27. System.out.println("程序执行完毕");
  28. // 以下方法为保持程序处于活动状态
  29. char ch = ' ';
  30. while (ch != 'n') {
  31. ch = ch;
  32. }
  33. }

2、查看步骤

启动JProfiler,等程序打印出"程序执行完毕" 后查看如下,Integer对象有800264

点击菜单上的按钮"Run GC" 执行垃圾回收后查看如下,Integer对象还有200270

说明未完全释放数据,查看对象在堆的快照

从以下视图可以看到该对象的arr2属性有数据未释放

①Heap Walker->Biggest Objects

②Heap Walker->References,JProfilerMemMain对象自身占用空间16bytes,引用其他对象占空间4288kB

③Heap Walker->Data,中arr2属性有数据占用空间

  • 死锁

1、测试代码

  1. package com.yyh.base.jprofile;
  2. /**
  3. * 死锁例子
  4. * @author yhye
  5. * @2011-11-8上午09:12:25
  6. */
  7. public class DeadlockMain  implements Runnable {
  8. boolean flag;
  9. static Object o1 = new Object();
  10. static Object o2 = new Object();
  11. public void run() {
  12. System.out.println(flag);
  13. if (flag) {
  14. synchronized (o1) {
  15. try {
  16. Thread.sleep(500);
  17. } catch (InterruptedException e) {
  18. e.printStackTrace();
  19. }
  20. synchronized (o2) {
  21. System.out.println("AAA");
  22. }
  23. }
  24. } else {
  25. synchronized (o2) {
  26. try {
  27. Thread.sleep(500);
  28. } catch (InterruptedException e) {
  29. e.printStackTrace();
  30. }
  31. synchronized (o1) {
  32. System.out.println("BBB");
  33. }
  34. }
  35. }
  36. }
  37. public static void main(String[] args) {
  38. DeadlockMain aaa = new DeadlockMain();
  39. DeadlockMain bbb = new DeadlockMain();
  40. aaa.flag = true;
  41. bbb.flag = false;
  42. Thread thA = new Thread(aaa);
  43. thA.setName("线程AAA");
  44. Thread thB = new Thread(bbb);
  45. thB.setName("线程BB");
  46. thA.start();
  47. thB.start();
  48. }
  49. }

2、查看步骤

启动JProfiler,等程序执行一段时间后查看如下,线程AAA和线程BB出现阻塞

查看Thread Views-> Thread  Monitor

①线程AAA的调用方的类和方法

②线程BB的调用方的类和方法

查看Thread Views-> Thread  Dumps

①线程AAA的阻塞的代码位置

②线程BB的阻塞的代码位置

Jprofiler监控工具(内存泄漏)的更多相关文章

  1. 利用Java剖析工具JProfiler查找内存泄漏的方法

    本文主要介绍如何如何利用在使用JProfiler时意识到内存泄漏以及查找内存泄漏的几种方法. 工具/原料   JProfiler 方法/步骤   JProfiler的内存视图会话提供了内存使用情况的动 ...

  2. 使用JProfiler进行内存分析

    在最近的工作中,通过JProfiler解决了一个内存泄漏的问题,现将检测的步骤和一些分析记录下来,已备今后遇到相似问题时可以作为参考. 运行环境: Tomcat6,jdk6,JProfiler8 内存 ...

  3. [转载]Java应用程序中的内存泄漏及内存管理

    近期发现测试的项目中有JAVA内存泄露的现象.虽然JAVA有垃圾回收的机制,但是如果不及时释放引用就会发生内存泄露现象.在实际工作中我们使用Jprofiler调用java自带的 jmap来做检测还是很 ...

  4. monkey检测内存泄漏

    monkey中检查内存泄漏,实际上是对一个操作多次操作后看内存情况,内存泄漏具体的原理可百度,现在我们梳理检测内存泄漏的方法: 测试前你需要安装: 1.MAT分析工具 2.使用工具事实监控内存指标,现 ...

  5. Java内存泄漏分析系列之二:jstack生成的Thread Dump日志结构解析

    原文地址:http://www.javatang.com 一个典型的thread dump文件主要由一下几个部分组成: 上图将JVM上的线程堆栈信息和线程信息做了详细的拆解. 第一部分:Full th ...

  6. 内存泄漏学习案例-1-ArrayList

    解决 内存泄漏 于是赶快登陆探测服务器,首先是 top free df 三连,结果还真发现了些异常. 我们的探测进程 CPU 占用率特别高,达到了 900%. 我们的 Java 进程,并不做大量 CP ...

  7. 一次 Java 内存泄漏的排查

    由来 前些日子小组内安排值班,轮流看顾我们的服务,主要做一些报警邮件处理.Bug 排查.运营 issue 处理的事.工作日还好,无论干什么都要上班的,若是轮到周末,那这一天算是毁了. 不知道是公司网络 ...

  8. JavaScript如何工作:内存管理+如何处理4个常见的内存泄漏

    摘要: 作者将自己常用的JavaScript模块分享给大家. 原文:JavaScript如何工作:内存管理+如何处理4个常见的内存泄漏 作者:前端小智 Fundebug经授权转载,版权归原作者所有. ...

  9. JAVA内存泄漏解决办法

    JVM调优工具 Jconsole,jProfile,VisualVM Jconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用.对垃圾回收算法有很详细的跟踪.详细说明参考这里 ...

随机推荐

  1. MySQL数据库事务各隔离级别加锁情况--read uncommitted篇(转)

    本文转自https://m.imooc.com/article/details?article_id=17291,感谢作者 1.目的 1.1 合适人群 1.数据库事务特征我只是背过,并没有很深刻的理解 ...

  2. firedac二进制序列和JSON序列的对比

    firedac二进制序列和JSON序列的对比 以同样大小的一个数据集的数据,作为测试的数据. 以JSON序列后的数据体积是4958字节. 以二进制序列后的数据体积是3044字节. 4958/3044= ...

  3. 正则表达式校验15/18位生份证-JAVA版

    public static boolean isIDNumber(String iDNumber) { if (iDNumber == null || "".equals(iDNu ...

  4. UML:概要设计,用什么画我的类图?

    背景 做过需求之后,很少使用 UML 画概要设计,这几天尝试的用了几个工具,最总还是选择了 VisualStudio. Edraw 详细信息很难编辑,如:签名. Viso 添加成员太麻烦了. Visu ...

  5. struts2必要的包

    想正常使用struts2.1.6,至少需要如下6 个jar包: struts2-core-2.1.6.jar freemarker-2.3.13.jar commons-logging-1.0.4.j ...

  6. StatefulSet: Kubernetes 中对有状态应用的运行和伸缩

    在最新发布的 Kubernetes 1.5 我们将过去的 PetSet 功能升级到了 Beta 版本,并重新命名为StatefulSet.除了依照社区民意改了名字之外,这一 API 对象并没有太大变化 ...

  7. HBase目录

    1. HBase介绍及简易安装(转) 2. java操作Hbase实例 3. HBase入门基础教程之单机模式与伪分布式模式安装(转) 4. HBase教程 5. 用Java操纵HBase数据库(新建 ...

  8. 第四章 第一个rabbitmq程序

    rabbitmq消息发送模型 要素: 生产者 消费者 交换器:生产者将消息发送到交换器 队列:交换器通过某种路由规则绑定到指定队列,将消息加入队列,消费者从队列消费消息 前提: 引入rabbitmq的 ...

  9. [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 ...

  10. 一个执行Dos命令的窗口程序,与各位分享。

    一个执行Dos命令的窗口程序,与各位分享.   效果图:     具体实现在代码中有详细的注释,请看代码.   实现执行CMD命令的核心代码(Cmd.cs):   [csharp]   using S ...