欢迎来到天天文库
浏览记录
ID:13209642
大小:365.41 KB
页数:9页
时间:2018-07-21
《java内存泄露模拟及分析解决方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、e-mail:derwee@qq.comderweeJava内存泄露模拟及分析解决方法1.1实践目标:1、使用JAVA代码实现模拟内存溢出2、分析JDK内存溢出的原因3、总结存在bug的JAVA编码实践4、总结JVM优化的方法1.2模拟内存溢出:为了方便模拟内存,特意把JVM的内存参数指定为更小(我的本本内存是8G的)。修改eclipse参数文件eclipse.ini调用JVM参数:-vmargs-Xms40m(原始是-Xms40m)-Xmx100m(原始是-Xmx384m)演示JAVA小程序实现原理:使用集合类对象装载大量的Persion对象,每次把new出来的对
2、象加入集合类对象后,更改对象的属性,再从集合类对象中删除该对象。会出现该删除的对象没有被删掉,Persion类对象不断占用内存,导致分配给JVM的内存被耗光。packagecom.derwee.collection.memory;importjava.util.*;/****@ClassName:OutOfMemory*@Description:内存溢出模拟,提出解决方法*@authoryangdw*@date2012-3-25下午6:58:49*/publicclassOutOfMemory{publicstaticvoidmain(String[]args){C
3、ollectioncollection=newHashSet();for(inti=0;i<900000000;i++){Persionper=newPersion(i,"yangdw");collection.add(per);//把new出来的对象加到集合里去per.setName("hundsun");//把刚new出来的对象的名字改为hundsuncollection.remove(per);//把刚加到集合里的对象删除//System.gc();//手工调用垃圾回收器System.out.println("请注意,现在集合对有persion对象数--"+c
4、ollection.size());}}}packagecom.derwee.collection.memory;/****@ClassName:Persion*@Description:TODO(这里用一句话描述这个类的作用)*@authoryangdw*@date2012-3-25下午8:16:54**/publicclassPersion{publicPersion(intid,Stringname){super();this.id=id;this.name=name;}privateintid;privateStringname;publicintgetId
5、(){returnid;}publicvoidsetId(intid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}@OverridepublicinthashCode(){finalintprime=31;intresult=1;result=prime*result+id;result=prime*result+((name==null)?0:name.hashCode());returnresult;}@Overridep
6、ublicbooleanequals(Objectobj){if(this==obj)returntrue;if(obj==null)returnfalse;if(getClass()!=obj.getClass())returnfalse;Persionother=(Persion)obj;if(id!=other.id)returnfalse;if(name==null){if(other.name!=null)returnfalse;}elseif(!name.equals(other.name))returnfalse;returntrue;}}使用JDK监
7、控程序进行监控JDK内存,线程情况。模拟程序没有运行前的JDK内存使用情况:运行JAVA模拟程序后出现:内存溢出错误:Exceptioninthread"main"java.lang.OutOfMemoryError:Javaheapspaceatjava.util.HashMap.resize(HashMap.java:462)atjava.util.HashMap.addEntry(HashMap.java:755)atjava.util.HashMap.put(HashMap.java:385)atjava.util.HashSet.add(HashSet
此文档下载收益归作者所有