zoukankan      html  css  js  c++  java
  • java内存问题排查及分析

    最近了解了一下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的内存分配,以及定位到代码问题的所在!!!

  • 相关阅读:
    ecshop ajax请求验证captcha(验证码)
    ecshop ajax内置函数Ajax.call
    Execl中函数使用总结
    php应用篇 PHPMailer使用
    Jquery中的选择器
    你的水桶有多满
    在纸上写todo list还是用APP?
    absolute居中
    搬家租房总结
    编译器的作用:将汇编语言翻译成机器语言
  • 原文地址:https://www.cnblogs.com/bangaj/p/9083389.html
Copyright © 2011-2022 走看看