前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java技术专题之JVM你的内存泄露了吗?

Java技术专题之JVM你的内存泄露了吗?

作者头像
数据饕餮
发布2019-01-14 15:36:08
3780
发布2019-01-14 15:36:08
举报
文章被收录于专栏:数据饕餮数据饕餮

一、从一个例子开始

  关于JVM的内存泄露,让我们从下面一个例子开始吧,大家来判断一下如果按照下面这种分配方式,会不会出现内存泄露呢?

代码语言:javascript
复制
1 import java.util.List;
 2 import java.util.Vector;
 3 
 4 public class MemoryTest {
 5     /**
 6      * @param args
 7      */
 8     public static void main(String[] args) {
 9         // TODO Auto-generated method stub
10         Vector vobj = new Vector(10);
11         for(int i=0;i<100;i++)
12         {
13             Object obj = new Object();        
14             vobj.add(obj);
15             //注意此处Java如何清除内存
16             obj = null;
17             //GC会清除这一块内存吗?            
18         }    
19         System.out.print("end");
20     }
21 }

以上程序不会有任何异常提示,是不是就代表没有内存泄露了呢。如果此时i最大值设为:100000000会怎么样呢?不妨自己跑一下程序,下面是我实测的结果,与具体JVM参数设置有关,各人的极限值可能不同。

代码语言:javascript
复制
代码语言:javascript
复制
1 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
2     at java.util.Arrays.copyOf(Unknown Source)
3     at java.util.Arrays.copyOf(Unknown Source)
4     at java.util.Vector.ensureCapacityHelper(Unknown Source)
5     at java.util.Vector.add(Unknown Source)
6     at MemoryTest.main(MemoryTest.java:14)
代码语言:javascript
复制

出现了内存泄露了吧。但是这种无限放大的方式,只能是事后发现,该出的事情已经出了,应经影响到了生产应用。所以事后检测于事无补。我们还需要另想办法。

二、如何判断是否出现了内存泄露

  JVM虚拟机内存的结构上一篇博客已经做了说明,只要Java堆中尚有可用空间,即使泄露也不会出现问题,除非内存空间已经超出JVM内存设置。如果没有设置内存限制,并且内存空间很大的情况下是不会出现错误提示的。这就给我带来了困扰,难道非要等内存不足,发生异常才能发现内存泄露吗?非也。

(1)代码走审:技术要求较高,纯经验法,遗漏可能性较大,可操作性较强,但一般要求互相审查。

(2)工具一 输出JDK的GC日志数据:

  设置:JAVA_OPTS增加以下参数打开jdk的GC输出日志:

  -verbose:gc -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError

(3)jmap获得运行中的JVM内存快照:

  jmap -dump:format=b,file=jmap.hprof <PID>

(4)Eclipse Memory Analyzer:专业工具就是专业; 需要导入jmap.hprof文件,链接地址附上,详细的就不多说了,免得有做广告之嫌。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年02月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档