讨论下面这个程序在jdk1.5下是否真的有内存泄露

问题描述

importjava.util.EmptyStackException;publicclassStack{/***Fieldelements.*/privateObject[]elements=newObject[10];/***Fieldsize.*/privateintsize=0;/***Methodpush.*@parameObject*/publicvoidpush(Objecte){ensureCapacity();elements[size++]=e;}/***Methodpop.*@returnObject*/publicObjectpop(){if(size==0)thrownewEmptyStackException();returnelements[--size];}/***MethodensureCapacity.*/privatevoidensureCapacity(){if(elements.length==size){Object[]oldElements=elements;elements=newObject[2*elements.length+1];System.arraycopy(oldElements,0,elements,0,size);}}/***Methodmain.*@paramargsString[]*/publicstaticvoidmain(String[]args){Stackstk=newStack();while(true){Objecto=newObject();for(inti=0;i<10000;i++){stk.push(o);}for(inti=0;i<10000;i++){stk.pop();}}}}

解决方案

解决方案二:
什么意思?
解决方案三:
就是这段代码有没有内存泄露。按照一般的说法,elements保留了对Object的引用。publicObjectpop(){if(size==0)thrownewEmptyStackException();returnelements[--size];}
解决方案四:
java应该不会有一般意义上的内存泄漏的吧。。
解决方案五:
你是指arraycop()后,原来的那个数组仍然包含着object的引用?
解决方案六:
有啊publicObjectpop(){if(size==0)thrownewEmptyStackException();returnelements[--size];}

应该先设置为nullObjectr=elements[--size];elements[size]=null;returnr;

为什么你要说在jdk5以下呢?
解决方案七:
可以试一下,使用jprofiler等测试不出有泄露。内存可以回收。
解决方案八:
引用2楼PFOOD的回复:

就是这段代码有没有内存泄露。按照一般的说法,elements保留了对Object的引用。publicObjectpop(){if(size==0)thrownewEmptyStackException();returnelements[--size];}

我觉得这样做,并不叫内存泄露,而是压根就没有释放,所谓内存泄露,是指那些应用或者操作系统压根无法回收的内存。而pop这样做的话,只是返回elements中的对象,却没有去掉elements对pop出对象的引用,所以,这些对象的空间暂时还是被程序占用,但将来再PUSH其它对象的时候,栈中旧的对象自然就会变成可释放状态,所以,我觉得使用这个结果,基本上不会有太大问题(应该和JDK版本也没有太大关系)。你可以做个试验,如果向其中push大量的数据(比如:100万个,目的是占用大量内存),然后再都pop处理,应该会发现,内存还是保存最高值,而没有释放。但我认为这不算内存泄露,只能说程序设计不合理罢了。
解决方案九:
和版本无关,不是内存泄露
解决方案十:
设计不合理,根据使用场景,可能会内存泄漏。例如,如果该栈是一个全局性的,这时因为pop时没有清空引用,则当栈中的对象已经没有用处时,本应该被虚拟机回收,但由于栈占用了引用,则就会发生内存泄漏。与jdk版本无关。
解决方案十一:
应该算吧,内存没及时释放
解决方案十二:
内存泄露?楼主请教一下
解决方案十三:
不会内存泄露,只会你自己一直引用,到内存放不下.大多是设计上的问题.
解决方案十四:
内存泄露?这个不清楚了,学习

时间: 2024-11-03 18:00:09

讨论下面这个程序在jdk1.5下是否真的有内存泄露的相关文章

《Android应用开发攻略》——1.15 程序:Android OS下的小费计算器Tipster

1.15 程序:Android OS下的小费计算器Tipster Sunit Katkar1.15.1 问题 当你和朋友前往饭店就餐并且希望计算各自的账单和小费时,可能陷入许多手动计算和分歧之中.你希望使用一个应用程序,简单地将小费比例加到总额上,并且按照就餐人数分配.Tipster就是Android中的一个实现,用它展示一个完整的应用程序.1.15.2 解决方案 这是一个简单的练习,使用Android中的基本GUI元素,然后用一些简单的计算和事件驱动UI代码将它们组合起来.将用到如下GUI组件

java程序在eclipse运行下出错,但是在cmd可以正常运行,求大神!

问题描述 java程序在eclipse运行下出错,但是在cmd可以正常运行,求大神! 源代码: class Person{ private String name; private String location; Person(String name){ this.name = name; location = "beijing"; } Person(String name,String location){ this.name = name; this.location = loc

Linux系统下监测C程序的内存泄露

在linux下些C语言程序,最大的问题就是没有一个好的编程IDE,当然想kdevelop等工具都相当的强大,但我还是习惯使用kdevelop工具,由于没有一个习惯的编程IDE,内存检测也就成了在linux下编写程序的一个大问题. 是不是说没有一种内存检查工具能够在linux使用呢,也不是,像valgrind工具还是相当不错的.他的下载地址是http://valgrind.org/downloads/current.html#current 下载一个valgrind 3.2.3 (tar.bz2)

关于WPF程序在win7系统下不能打印控件的问题

问题描述 RT,最近到客户现场实施发现WPF程序在win7系统下打印控件为空,也就是打印机打印出来的是白纸,啥都没有,在win8系统下可以打印内容,有人遇到过这个问题么? 解决方案 解决方案二:没遇到过.你可以试试写一个最简单的wpf程序,为用户更新一下打印机驱动,或者给打印机换墨.难道你的wpf程序在开发测试中就从来没有在win7下测试过,跑到用户那里测试么?解决方案三:如果你们的程序在公司和别的用户那里在win7系统下已经测试过,作为一个技术服务人员,应该想到的是有问题的那个范围的东西,纠结

mysql-WEB程序在linux服务器下连接Mysql超时!

问题描述 WEB程序在linux服务器下连接Mysql超时! 请问下,我linux服务器部署WEB项目后,启动没报超时,但是一访问有数据的页面就报连接数据库超时.本地跑就没问题,我改了Mysql的默认时间,还是这样.要怎么解决?求大神 解决方案 先看你的 web程序能不能正常连接上数据库,然后就是执行数据库查询是否成功 解决方案二: 看是什么数据,一个是你连接字符串,是不是根本没法打开数据库. 尝试先注释掉数据库访问的代码看看

visual studio 2010-VS2010 mfc程序无法在XP下运行

问题描述 VS2010 mfc程序无法在XP下运行 用VS2010写了个软件,在XP下可以打开,但是运行其中的一个功能就会报错 请问这个是啥情况呢额,在自己跟朋友的WIN7上运行无误 我在自己电脑上试着用XP兼容模式运行,也是无法运行,程序直接崩溃了,请问可能是什么问题额 解决方案 缺少vc10.0运行库,从微软下载安装就可以了.再不行也不排除xp是山寨盗版的,有篡改和感染360流氓软件. 解决方案二: 这个问题我遇见过 不知道怎么解决 解决方案三: 这个问题我遇见过 不知道怎么解决 解决方案四

dll调用-jdk1.6下用jna调用dll库报错,换成jdk1.7成功

问题描述 jdk1.6下用jna调用dll库报错,换成jdk1.7成功 使用jkd1.6提示java.lang.UnsatisfiedLink,换成jdk1.7就可以了,请问有没有熟悉的大神知道是什么原因 解决方案 http://bbs.csdn.net/topics/390509805

javascript-编写的一个HTML和JavaScripte程序,麻烦看下哪里出了错误

问题描述 编写的一个HTML和JavaScripte程序,麻烦看下哪里出了错误 解决方案 onclick="verfy(document.getElementsByName('a')[0].value)" 解决方案二: onclick="verfy(a.value)" 这行代码不对,你的a是前面那个input的name属性所以a.value是找不到对应的值得,你应该id="a" 然后document.getElementById("a&

xp系统-vs2010生成的访问access数据库程序,在xp下不能查询

问题描述 vs2010生成的访问access数据库程序,在xp下不能查询 我在32位win7系统下,编写的sql访问access2010数据库程序,调试完成,生成了可执行文件.但是当我将执行好的文件,安装到xp系统上时,可以安装,数据更新,也能更新到数据库,就是查询功能不好用,跟没有链接查询似得,求大神帮忙? 解决方案 可以更新按理说也可以查询.你去掉try catch然后运行,看看报什么错.比如是不是连接字符串或者日期格式的问题. 解决方案二: 我在win7系统下运行,及能更新,也能查询,什么