求教“java内存泄漏问题,最好提供实例代码” 讨论者有分!谢谢各位大侠! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 什么是内存泄露?java有内存泄露的问题吗? effect java里讲的堆栈里会维护对弹出数据的过期引用,即使这些数据不再被用,只要栈还在,这些过期数据都不会被回收,时间长了就会内存不足崩溃掉 JVM管理两种类型的内存,堆和非堆。堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的。它和堆不同,运行期内GC不会释放空间。如果web app用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出了也会导致这块内存的占用过多造成溢出,或者tomcat热部署时侯不会清理前面加载的环境,只会将context更改为新部署的,非堆存的内容就会越来越多。可以考虑设置Xms和Xmx java常量池里的东西啥时候回收呀 可能会造成楼主那问题啵? 主要是全局的map或list等,在整个运行期内都会用到,虚拟机当然不会回收了,此时,如果你只进不出,比如一些没用数据不断存在于map中,时间长了,就会有问题。 java有几个地方会造成内存泄漏。集合类容易造成内存泄漏,jni容易造成内存泄漏,数据库连接容易造成内存泄漏等等。虽然java有垃圾收集机制,但并不代表不会出现内存泄漏。 还有,开发swing时,过多new窗口或者swing组件,也会出现内存泄漏,不过这种泄漏是属于集合类的内存泄漏。 虚拟机几乎不可能有内存泄漏问题,但是Java应用对资源管理不当可能会导致内存无法释放。 有内存泄露啊 比如int相减 绝对大-绝对小就会了 Integer a=new Integer(1);List<Integer> list=new ArrayList<Integer>();list.add(a);a=null;//a并没有被回收 LS 但是 如果LIST 不被引用了 a 应该就可以被回收了吧 自己实现堆载的数据结构时有可能会出现内存泄露,可参看effective java http://www.cnblogs.com/dotnetdoor/archive/2008/06/09/1216125.html 当int i为一个很大的数时,执行i-2i时就会出现了。---------------------------------------------------------------------------------------------------- 北京-java QQ群: 88937547 java技术交流,新开群,目标200人。另:招管理员,只要技术好,热心回答别人的问题就行。 Java从某种程度上说,并不存在内存泄漏问题,因为有GC(垃圾回收器)但是你所指的内存泄漏可能是指引用对象的引用变量没被值null。 内存分为栈区,堆区,方法区如果是栈溢出那一定是你递归的太深。不听的声明变量导致的。如果是堆溢出那可能性很多。譬如你机器本身内存很小。一次性执行大的内存数据的拷贝。一次性从数据库读入很大的一张表。你的一些对象一直被其它对象引用譬如你有个object o = new object();map.put(o);这个map一直在你的一个运行的线程中这样即使你将o=null你new出来的对象也永远不会被垃圾回收。 我想这个不能称为内存泄漏吧,因为通过map还能访问这个对象,所以回收了反而是不正确的.只有那些没办法再用到的东西还没有回收的话才是内存泄漏。比如二楼所说的,堆栈里会维护对弹出数据的过期引用,即使这些数据不再被用,只要栈还在,这些过期数据都不会被回收,时间长了就会内存不足崩溃掉。弹出的数据无法通过栈访问了,那么这些数据就没法取得了,如果不被回收的话,就是内存泄漏 JAVA中内存益出很正常否则 java.lang.OutOfMemoryError 这个异常留着干嘛用的? 没错,是有的,eclipse这个Java实现的平台就存在内存泄露(在open new window时),在MemoryAnalyzer这个eclipse插件的说明中就举了这个例子,这个插件就是用来检查内存泄露的,我前一段时间用过,很不错。 感谢各位大侠的参与!答案我是有的!只是和大家具体讨论一下!java 肯定是有内存泄漏!我说的绝对一点“所有语言都会有内存泄漏问题”!希望大家继续 讨论!等待高手!特别感谢16楼 ,这个链接真的很不错!大家也学习下吧!12楼 和17楼也特别感谢一下! java音乐播放的问题,为什么会没有声音呢 类似淘宝的多级分类的展现如何实现? 关于动态加载类的问题 求 Thinking in Java 第四版代码 SOS:为什么我的textpad运行不了JAVA啊? 我来报到: 怎么学Java?? 怎样唯一标识一个java进程 求救!一个关于package的小问题 关键字this 大家来讨论吧,关于ASP中如何调用JAVA的问题.●UP有分● 字符串的连接问题 请问正则如何去掉嵌套的TABLE?
java有内存泄露的问题吗?
集合类容易造成内存泄漏,jni容易造成内存泄漏,数据库连接容易造成内存泄漏等等。
虽然java有垃圾收集机制,但并不代表不会出现内存泄漏。
List<Integer> list=new ArrayList<Integer>();
list.add(a);
a=null;//a并没有被回收
北京-java QQ群: 88937547 java技术交流,新开群,目标200人。另:招管理员,只要技术好,热心回答别人的问题就行。
但是你所指的内存泄漏可能是指引用对象的引用变量没被值null。
如果是栈溢出那一定是你递归的太深。不听的声明变量导致的。
如果是堆溢出那可能性很多。譬如你机器本身内存很小。一次性执行大的内存数据的拷贝。一次性从数据库读入很大的一张表。你的一些对象一直被其它对象引用譬如你有个object o = new object();map.put(o);这个map一直在你的一个运行的线程中这样即使你将o=null你new出来的对象也永远不会被垃圾回收。
我想这个不能称为内存泄漏吧,因为通过map还能访问这个对象,所以回收了反而是不正确的.
只有那些没办法再用到的东西还没有回收的话才是内存泄漏。
比如二楼所说的,堆栈里会维护对弹出数据的过期引用,即使这些数据不再被用,只要栈还在,这些过期数据都不会被回收,时间长了就会内存不足崩溃掉。
弹出的数据无法通过栈访问了,那么这些数据就没法取得了,如果不被回收的话,就是内存泄漏
否则 java.lang.OutOfMemoryError 这个异常留着干嘛用的?
java 肯定是有内存泄漏!我说的绝对一点“所有语言都会有内存泄漏问题”!
希望大家继续 讨论!等待高手!
特别感谢16楼 ,这个链接真的很不错!大家也学习下吧!12楼 和17楼也特别感谢一下!