最近了解了一下jdk对于jvm分析工具的使用,下面通过一个简单的列子介绍一下,以下内容部分来自其他帖子。

下面这段代码明显有问题(从网上抄的)

 1 import java.util.HashMap;
 2 import java.util.Map;
 3
 4 public class MemoryLeak {
 5
 6  public static void main(String[] args) {
 7   Map<Key, String> map = new HashMap<Key, String>(1000);
 8
 9   int counter = 0;
10   while (true) {
11        // creates duplicate objects due to bad Key class
12    map.put(new Key("dummyKey"), "value");
13    counter++;
14    if (counter % 1000 == 0) {
15     System.out.println("map size: " + map.size());
16     System.out.println("Free memory after count " + counter
17       + " is " + getFreeMemory() + "MB");
18
19     sleep(1000);
20    }
21
22
23   }
24  }
25
26  // inner class key without hashcode() or equals() -- bad implementation
27  static class Key {
28   private String key;
29
30   public Key(String key) {
31    this.key = key;
32   }
33
34  }
35
36  //delay for a given period in milli seconds
37  public static void sleep(long sleepFor) {
38   try {
39    Thread.sleep(sleepFor);
40   } catch (InterruptedException e) {
41    e.printStackTrace();
42   }
43  }
44
45  //get available memory in MB
46  public static long getFreeMemory() {
47   return Runtime.getRuntime().freeMemory() / (1024 * 1024);
48  }
49
50 }

执行这个代码以后通过JDK自带工具jconsole查看jvm的使用情况

连接后查看果然和猜想的一样堆内存的使用蹭蹭蹭的往上窜

然后通过jps命令找到对应进程的id

通过进程的ID把内存dump下来

然后通过jvisualvm工具分析该文件

发现HashMap的实例数很多。

可以通过 jhat -port 5000 heap.hrof 命令 启动服务我们就可以在浏览器中,通过http://localhost:5000/进行访问,如下所示

通过以上的手段分析 可以或多或少的了解jvm的内存分配,以及定位到代码问题的所在!!!

转载于:https://www.cnblogs.com/bangaj/p/9083389.html

java内存问题排查及分析相关推荐

  1. 一次恐怖的 Java 内存泄漏排查实战

    转载自  一次恐怖的 Java 内存泄漏排查实战 最近在看<深入理解Java虚拟机:JVM高级特性与最佳实践>(第二版)这本书,理论+实践结合,深入浅出,强烈推荐给大家. 这两天对JVM内 ...

  2. 【Java内存溢出排查】gc监测以及内存突增问题排查

    前情提要 文档:[Java内存溢出排查]测试环境服务器挂... 链接:http://note.youdao.com/noteshare?id=783e7ec89950f4167867ef3ef3347 ...

  3. java内存溢出排查top_process-parse-shell

    process-parse-shell 介绍 cpu 和 内存异常排查分析shell脚本和步骤 比如用于排查高cpu(top,jstack)和内存溢出等情况 安装教程 使用说明 cpu排查分析 #下载 ...

  4. Java内存模型JMM简单分析

    参考博文:http://blog.csdn.net/suifeng3051/article/details/52611310 http://www.cnblogs.com/nexiyi/p/java_ ...

  5. Java —— 内存泄露排查

    最近发现服务器内存使用持续增长且增长速率大,怀疑是内存泄露导致的. 最终定位到是因为程序中存在线程池频繁创建但未销毁问题导致线程泄露,进而影响内存使用增长. Tips:本文不记录排错过程,只记录可疑点 ...

  6. Java 内存泄漏排查,新技能+1

    点击关注公众号,Java干货及时送达 来源 | https://zhenbianshu.github.io/ 前些日子小组内安排值班,轮流看顾我们的服务,主要做一些报警邮件处理.Bug 排查.运营 i ...

  7. 又一次 Java 内存泄漏排查,新技能+1

    点击关注公众号,Java干货及时送达 前些日子小组内安排值班,轮流看顾我们的服务,主要做一些报警邮件处理.Bug 排查.运营 issue 处理的事.工作日还好,无论干什么都要上班的,若是轮到周末,那这 ...

  8. java内存溢出排查jstack_Java命令行监控工具(jmap,jstack,jstat,jinfo,jps)

    项目部署上线之后,线上项目是不能轻易修改的,定位问题的难度也会变大.因此监控是非常重要的一个环节,有了监控,我们才能更好的定位系统中的问题,从而排查.监控的工具有很多种, 但是java自带的命令行监控 ...

  9. Java内存溢出排查(必看)

    Java OOM毫无疑问是开发人员常见并且及其痛恨的问题,但是任何服务的开发都没法避免OOM.因此,OOM的排查及定位是每个Java工程师都必备的技能. 所遇到的问题 在使用scala开发的一个web ...

最新文章

  1. 51单片机程序及调试步骤实战经验
  2. 天融信TOS系统命令行下查看资源使用情况
  3. token 过期刷新令牌_OkHttp实现全局过期token自动刷新
  4. 【Android UI设计与开发】7.底部菜单栏(四)PopupWindow 实现显示仿腾讯新闻底部弹出菜单...
  5. Ant Design入门之开始使用
  6. OS- -请求分页系统、请求分段系统和请求段页式系统(二)
  7. Apache Cassandra和低延迟应用程序
  8. 在github上托管Maven存储库(包含源代码和javadoc)
  9. 一张图解释什么是遗传算法_遗传算法简介及代码详解
  10. 软件的极简主义的三个大敌:配置文件,冗余的参数,和大量复杂的接口。
  11. 最小化安装的redhat/centos安装gnome桌面
  12. 铁路联网售票系统 按计算机应用,铁路联网售票系统按计算机应用的分类它属于...
  13. 图片存储解决方案--阿里云OSS
  14. 华中科技大学伍冬睿教授团队:生理计算中的对抗攻击与防御综述
  15. php手册 mac版,PHP中文手册for mac-PHP中文手册Mac版下载 V1.0.2-PC6苹果网
  16. 深度森林:常见Warning及解决方案
  17. 单片机C语言入门自学指南(前期准备)
  18. iCloud账号服务器出问题了,icloud连接到服务器时出现问题(苹果id不能退出登录怎么办)...
  19. 【开发日常】什么是标准?什么是协议?标准和协议之间是什么关系?
  20. PyQt5 组合键

热门文章

  1. java深拷贝如何执行_Java克隆执行深拷贝
  2. 产品网络推广方案之网站SEO优化如何“讨好”用户,降低网站跳出率?
  3. 企业网络推广专员浅析企业网络推广日常维护要做好
  4. 如何提高营销型网站与搜索引擎之间的信任度?
  5. 如何完美隐藏Disposable的存储和销毁过程(二)
  6. i3wm amxier toggle只关闭不开启问题解决
  7. elasticsearch 路由文档到分片
  8. angular1x初始与架构演进(一)
  9. window 修改字符集为utf8
  10. group by具有去重的功能