当前位置: 技术问答>java相关
关于java(GUI程序)的内存泄露应该如何解决呢?
来源: 互联网 发布时间:2015-07-06
本文导语: 我们做的是一般的application,主要用到了swing,主要用到的组件也就是JFrame,JPanel,JButton,JTable等等以及事件处理。现在发现整个程序存在 内存泄露,而在写程序时候并没有十分关心这个问题,请问应该如何去修改 才能够避...
我们做的是一般的application,主要用到了swing,主要用到的组件也就是JFrame,JPanel,JButton,JTable等等以及事件处理。现在发现整个程序存在
内存泄露,而在写程序时候并没有十分关心这个问题,请问应该如何去修改
才能够避免?我用了purify,发现每次打开一个窗口然后关闭,内存总是不能恢复。
内存泄露,而在写程序时候并没有十分关心这个问题,请问应该如何去修改
才能够避免?我用了purify,发现每次打开一个窗口然后关闭,内存总是不能恢复。
|
the memory leak discussed everywhere is normally because you keep the reference to an unused object somewhere.
most obvious example would be:
obj = new XXX();
vector.add(obj);
obj = null;//here, obj won't be gc'ed because it is still in vector.
most obvious example would be:
obj = new XXX();
vector.add(obj);
obj = null;//here, obj won't be gc'ed because it is still in vector.
|
要在程序里着手,看是否最优化。
http://www.onjava.com/lpt/a//onjava/2001/05/30/optimization.html
http://www.onjava.com/lpt/a//onjava/2001/05/30/optimization.html
|
跟static声明应该没有必然关系。“内存泄漏”这个词在Java里并不确切,因为它的垃圾收集(内存释放)机制跟Windows内存管理器的完全不同。在Java中,并不是每一个对象在失效之后就会被立即释放掉所占内存。及时是Java的应用整体结束之后,也许很多对象仍可以在JVM中存在相当长时间——直至JVM下一次调用垃圾收集释放以上内存。
Java应用程序对内存的冠里也不是完全被动的,你也可以在合适的地方显式地调用System.gc(),来让JVM立即清理无用的对象。比如,在paint()的结尾——因为画图的资源相对而言比较“昂贵”!
更多关于Java垃圾收集问题请参考Thinking in Java 2nd Edition。
Java应用程序对内存的冠里也不是完全被动的,你也可以在合适的地方显式地调用System.gc(),来让JVM立即清理无用的对象。比如,在paint()的结尾——因为画图的资源相对而言比较“昂贵”!
更多关于Java垃圾收集问题请参考Thinking in Java 2nd Edition。