JAVA中有没有内存泄漏?????

treestar001 2005-05-25 10:31:03
java虚拟机可以控制java程序中的内存回收,但是有没有异常情况会导致
java程序中出现内存泄漏而虚拟机却不能加以控制
请举例说明

谢谢
...全文
113 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
treestar001 2005-05-26
  • 打赏
  • 举报
回复
谢谢
chongkai 2005-05-25
  • 打赏
  • 举报
回复
有的,如果你自己做了某种内存管理,比如在一个数组中存储object,你的程序可能会认为某个节点的object没用了,但虚拟机不这样认为,只要外层容器还被引用,它就不会回收容器中的元素所引用的对象。所以Java的内存泄漏大多发生在利用Collection或数组的场合。例如,用一个Object数组实现一个堆栈,pop方法可能是这样的

public Object pop(){
return array[pointer --];//pointer是栈顶指针
}

这时就会发生内存泄漏,pop之后,原来的栈顶位置还指向某个Object,而虚拟机是不会回收这个object的。

pop方法应该改成这样

public Object pop(){
Object result = array[pointer];
array[pointer --] = null;//赋值null,栈顶对象会被回收
return result;
}
woanon 2005-05-25
  • 打赏
  • 举报
回复
虽然会自动清理。有些地方自己写代码清理一下

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧