锁定老帖子 主题:java的内存泄露问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-27
peacockbird 写道 或者说我们什么时候去消除对象的过期引用?
因为函数内的局部变量出函数就会丢失引用,所以,只有类的成员变量是可能被长期持有的。 静态成员变量,类初始化的时候,静态成员就会被创建,直到程序结束,所以可能会造成内存泄漏。特别是集合,数组类的成员变量 实例的成员变量,如果某个实例,生命周期贯穿整个程序,那么这个实例的成员变量也可能造成内存泄漏。 其他情况下可能由于内存使用很糟糕造成内存溢出,不过如果能够增加jvm虚拟内存让程序运行过去,那么内存会被GC释放不会造成泄漏。 |
|
返回顶楼 | |
发表时间:2007-09-27
非常感谢各位的帮助
|
|
返回顶楼 | |
发表时间:2007-09-27
听说,Java中有一个弱引用类的哦~!
那么也就是说,即使外界没有任何引用指向堆内存对象时,GC自身也会有一个弱引用指向这些对象。本来Java 中的引用就是C++中的指针,如果GC本身没有弱引用的话,怎么知道那些内存算是垃圾内存呢?就像C++中的delete()方法一样,需要一个指针变量作为参数。 说老实话,虽然垃圾回收可以让程序员变得更懒惰,但是我个人真的很讨厌它的。因为不知道什么时候才能释放掉你可能马上就想利用的内存。 |
|
返回顶楼 | |
发表时间:2007-09-27
所谓弱引用,就是雇个机器人自动去断开钩子而已~~它可不是狗实现的....
GC的实现方法。建议楼上的去查查资料。搞清楚了你估计就会改变对GC的看法。 |
|
返回顶楼 | |
发表时间:2007-09-27
realorg 写道 怎么知道那些内存算是垃圾内存呢?
对象是从main函数开始创建的,所有对象之间的关系会形成一张图,不在图里的就是再也用不到的垃圾了。 |
|
返回顶楼 | |
发表时间:2007-09-27
peacockbird 写道 呵呵,谢谢。但是我有个疑问jvm是怎么知道什么时候这些引用是我们自己在管理的?
有一种jvm他是这样找的(忘记哪种了,汗一个),他会在gc发生的时候便利所有栈上的引用,只要有引用的,他就顺藤摸瓜,摸下去,如果是对象就便利对象的引用,摸呀摸呀,只要被他摸到的,都是安全的,都不会被删除。而且清理的时候也有两种情况,一种是较小的内存释放,就直接释放了,另一种是较多的释放,他会拷贝内存到另一个连续的区域,因为java 的new方法分配的内存是连续的,这也是为啥比c++的new快的原因。 大体上就这样,具体jvm实现不同。 |
|
返回顶楼 | |
发表时间:2008-07-28
jvm只负责管理对象,可不负责管理引用,你不把它设置成null,你自己知道这个我不用了,别人可不知道这个你不用了,null等于你告诉他“不用”的一个信号
|
|
返回顶楼 | |