• 内存泄漏

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. spring源码分析之BeanfFactory

    spring的IOC容器能够帮我们自动new对象,对象交给spring管之后我们不用自己手动去new对象了.那么它的原理是什么呢?是怎么实现的呢?下面我来简单的模拟一下spring的机制,相信看完之后 ...

  2. duplicate symbol _main in: / linker command failed with exit code 1

    duplicate symbol _main in: /Users/mb467/Library/Developer/Xcode/DerivedData/barChartDemo-gevlnavnpan ...

  3. 聊聊高并发(十四)理解Java中的管程,条件队列,Condition以及实现一个堵塞队列

    这篇里面有一些主要的概念,理解概念是件有意义的事情,仅仅有理解概念才干在面对详细问题的时候找到正确的解决思路.先看一下管程的概念 第一次在书上看到管程这个中文名称认为非常迷糊,管程究竟是个什么东东,于 ...

  4. SQL:(转)数据库中的锁机制(数据库中有哪些锁)

    数据库中的锁机制 锁是网络数据库中的一个非常重要的概念,它主要用于多用户环境下保证数据库完整性和一致性.各种大型数 据库所采用的锁的基本理论是一致的,但在具体实现上各有差别.目前,大多数数据库管理系统 ...

  5. XCL-Charts画曲线图(CurveChart) 例2

    还有一个横向的曲线图(CurveChart) 效果: 代码: //图基类 chart = new CurveChart(); //图所占范围大小 chart.setChartRange(0, 0, t ...

  6. [Android] Anreoid repo 切换分支

    reference : http://blog.csdn.net/lihui130135/article/details/40858885 如果已经有android仓库但是还不是最新的,想切换到And ...

  7. 简明python教程 --C++程序员的视角(七):异常

    当你的程序中出现某些 异常的 状况的时候,异常就发生了.例如,当你想要读某个文件的时候,而那个文件不存在.或者在程序运行的时候,你不小心把它删除了.上述这些情况可以使用异常来处理. 假如你的程序中有一 ...

  8. CenoOS下如何对mysql编码进行配置

    1 修改/etc/mysql/my.cnf配置文件 增加default-character-set=utf8 配置文件如下 [client] port = 3306 socket = /var/run ...

  9. Informatica 常用组件Lookup之二 已连接和未连接的查找

    可以配置一个已连接的查找转换,以从映射管道中直接接收输入:您也可以配置一个未连接的查找转换,以从其它转换的表达式结果中接收输入. 已连接的查找 未连接的查找 直接从管道接收输入值. 从其它转换的 :L ...

  10. Win Socket编程原理及简单实例

    [转]http://www.cnblogs.com/tornadomeet/archive/2012/04/11/2442140.html 使用Linux Socket做了小型的分布式,如Linux ...