- 浏览: 324184 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
zxjlwt:
学习了。http://surenpi.com
利用ClassFileTransformer实现aop -
幽蓝阿狸:
但是,这个在javaweb项目中只能执行一次,一旦类已经被载入 ...
利用ClassFileTransformer实现aop -
xusheng87:
支持一下!
apache+tomcat配置 -
geyaandy:
貌似懂了不少 膜拜
spring事物之连接泄露 -
xiaophai:
支持一下!
apache+tomcat配置
转:http://my.oschina.net/gofan/blog/73266
常见的内存泄露:
1.文件流不关闭
2.数据库连接没有关闭
3.内存使用过多
内存不够用如下:
public static void main(String[] args) throws InterruptedException {
List<int[]> list = new ArrayList<int[]>();
Runtime run = Runtime.getRuntime();
int i=1;
while(true){
int[] arr = new int[1024 * 8];
list.add(arr);
if(i++ % 1000 == 0 ){
System.out.print("i="+i );
System.out.print("最大内存=" + run.maxMemory() / 1024 / 1024 + "M,");
System.out.print("已分配内存=" + run.totalMemory() /1024 / 1024 + "M,");
System.out.print("剩余空间内存=" + run.freeMemory() / 1024 / 1024 + "M");
System.out.println("最大可用内存=" + ( run.maxMemory() - run.totalMemory() + run.freeMemory() ) / 1024 / 1024 + "M");
Thread.sleep(6*1000L);
}
}
}
如果将程序改为如下,则不会泄露:
public static void main(String[] args) throws InterruptedException {
// List<int[]> list = new ArrayList<int[]>();
Runtime run = Runtime.getRuntime();
int i=1;
while(true){
int[] arr = new int[1024 * 8];
// list.add(arr);
if(i++ % 1000 == 0 ){
System.out.print("i="+i );
System.out.print("最大内存=" + run.maxMemory() / 1024 / 1024 + "M,");
System.out.print("已分配内存=" + run.totalMemory() /1024 / 1024 + "M,");
System.out.print("剩余空间内存=" + run.freeMemory() / 1024 / 1024 + "M");
System.out.println("最大可用内存=" + ( run.maxMemory() - run.totalMemory() + run.freeMemory() ) / 1024 / 1024 + "M");
Thread.sleep(6*1000L);
}
}
}
所以,当短生存期对象(int[] arr)被长生存期对象(List<int[]> list )引用时容易出现内存泄露;
即使在原程序中将arr=null,也不能释放掉,应为任然被list引用着。
运行内存泄露的程序,用jstat -gcutil 命令打印如下:
查看实例如下:
发现有163959432个int的数组;
不存在泄露时的截图如下:
经对比可发现,内存泄露时E区和old区使用率迅速加大,fgc增多,知道使用为99时报outofmemory错误。
常用分析内存泄露问题命令:
jps -l -v 查看正在运行的进程号
jmap -histo pid 查看pid进程中的实例数
jstat -gcutil pid 3000 每个3秒打印个区中的内存使用状态
jconsole pid 打开jconsole可视化页面查看
发表评论
-
java 字节流与字符流的区别
2013-06-27 14:20 841转:http://blog.csdn.net/cynhafa ... -
axis学习笔记
2013-06-25 16:33 1060转:http://www.cnblogs.com/mingz ... -
java 类加载器
2013-06-25 16:00 788转:http://www.ibm.com/devel ... -
ArrayList原理
2013-06-24 16:00 813ArrayList是List接口的可变数组的实现。实现了 ... -
HashMap原理
2013-06-21 17:33 1245http://www.cnblogs.com/xwdrea ... -
http与socket的区别
2013-06-14 15:46 9141、TCP连接 手机能够使用联网功能是因为手机底层实现了 ... -
开发疑难错误解决汇总
2013-06-13 13:56 7951.javax.naming.NameNotFoundExce ... -
方便的方法
2013-05-28 18:43 7711. String template="http:/ ... -
webx
2013-04-21 11:09 8229<pipeline> <valve ... -
java垃圾回收机制
2013-04-20 10:56 861JVM分代垃圾回收策略的基础概念 由于不同对象的生命周期不一样 ... -
jvm内存原型
2012-11-06 16:00 861转:http://my.oschina.net/liuxuew ... -
eclipse svn 插件安装
2012-11-01 19:13 865重新装了win7 64位的操作系统,eclipse还是用 ... -
java异常信息完整性的控制
2012-10-26 10:53 1475转:http://www.blogjava.net/softw ... -
数据库连接池原理
2012-10-17 14:07 1152转:http://www.oschina.net/questi ... -
redict forwrod 区别
2012-09-14 17:12 1430window.location.href 点击“后退”有效 ... -
List<object> 排序
2012-03-12 10:56 890如:对List 按照AccountName降序或者升序排序pu ... -
toString
2012-02-17 09:40 858public String toString() { ... -
http详解3
2011-11-17 10:50 1564在学习了http详解1和2后,自己写了下面的登录的例子; ... -
http详解2
2011-11-16 16:17 751转自http://www.iteye.com/topic/11 ... -
http详解1
2011-11-16 16:16 932转自http://www.iteye.com/topi ...
相关推荐
java内存泄露查询的几个命令系统命令的使用说明
详细介绍了 java内存泄露 的一些细节,很受用的
java 内存泄露分析方法、在工作中经常会碰到各种原因导致的内存泄露问题,本方法或许可以帮你快速定位内存泄露的原因从而解决问题
有关java内存泄露的详细资料,Java与C语言的内存管理模型,内存泄漏方式
Java 内存泄露 解决方案 outofmemoryException 从实践获取真理
java内存泄露、溢出检查方法和工具。 步骤: 1,使用linux命令生存堆栈文件 2,用MemoryAnalyzer.exe工具打开 3,根据工具生成的饼状图可以清晰的找出内存泄漏源
Java内存泄露及内存无法回收解决方案,深入讲解相关原理及相关过程。
基于Java的内存泄露分析及定位,希望对各位有用!
java内存泄露定位与分析[整理].pdf
java内存分析
由于在开发和面试中往往都会遇到java内存泄露问题,所以综合个人平时遇到的和搜集了些网上的关于内存泄露问题写了这篇总结,同时加了点小例子,希望对大家有所帮组,如果有所不全,希望给我留言提出来,供大家相互...
虽然java有垃圾自动回收机制,但在写程序时,未及时关闭连接,对象引用未释放等,仍会造成内存泄露,此文章从关闭连接,使用弱引用等方面,介绍了怎样避免内存泄露。
java内存泄露问题的定位与详细的分析过程
java内存泄露定位与分析
介绍了java中内存泄露的知识,如:为什么会产生内存泄露,以及通过什么样的方式可以避免内存泄露
java检测内存泄露工具--jprofiler5 里面含破解注册码,按照使用说明即可使用!
java内存泄露分析与避免办法,同时也提到如何通过jdk自带工具检测内存是否泄露。
通过一个Demo来简要介绍下ThreadLocal和ClassLoader导致内存泄露最终OutOfMemory的场景。下面通过示例代码给大家分享Java内存泄露的相关知识,感兴趣的朋友一起看看吧
介绍java内存泄露,及解决方案
深入理解java内存泄露的原因和解决方案