你好banq,请教

lvyg 05-09-03

你好,banq, 请你给我深入培析一下JAVA中的内存泄露主要是怎么形成的?形成条件等?希望你这次不要再回答什么垃圾没有回收之类的,这个我也知道

dabb
2005-09-04 12:32

真是shit.没事找事。你这么牛b还问什么?就是知道也不告诉你。下面这个link你自己去看吧。
http://www-128.ibm.com/developerworks/library/j-leaks/index.html

banq
2005-09-04 13:16

>内存泄露主要是怎么形成
简单地说:就是由于对象没有被垃圾回收机制回收,如果问会在什么情况下形成,各种可能性,这涉及到良好的编程风格了。

在编程时,使用单态或静态类时,使用到了类字段,在类字段中保存了一些其他对象引用,如果越来越多就发生内存泄漏,内存泄漏总是不在意发生的,如打开一个数据库连接忘记关闭,所以数据库开启就立即关闭,在J2EE中规定资源包括事务资源都是必须在一个servlet中service方法开启或关闭。

内存泄漏情况非常多,只要你用到内存,用到Collection;用到缓存,用到状态,都有可能内存泄漏,而且是一个对象串一个对象,可能在你当前场景中没有,但是在系统其他地方用到你这些对象,结果还是发生泄漏。

养成良好的编程习惯是关键,少用或不用单态或静态,使用对象时,关注其scope,当然如果你觉得烦琐的话,使用Jdon框架之类微容器自动照顾,但是使用Spring时注意单态获得对象方式,如果你在这个这个Spring管理的字段中hold一些其他对象,防止内存泄漏,这个问题已经在Spring其他贴中有所讨论,可查看精华贴:Spring真相等。