Does 'new' cause a memory leak in Java?
本问题已经有最佳答案,请猛点这里访问。
当我用C++中的指针创建一个新对象时,我需要在完成时删除它,或者当我将指针移到另一个对象时,以避免内存泄漏。Java中的EDOCX1 0是这样工作的吗?
1 2 | Some_Object o1 = new Some_Object("oj1"); o1 = new Some_Object("oj2"); // do this make memory leak in Java? |
简而言之,没有。Java有一个内置的(强制的)垃圾收集器。C++没有。
一旦EDCOX1〔0〕不再可访问(在Java中),它就有资格进行垃圾收集(并且收集器可以释放内存)。
像Java这样的内存管理语言中的"内存泄漏"与C++没有完全相同的含义,因为Java不需要显式地释放您分配的内存。
有了这句话,你基本上可以有同样的效果。在这方面,观察者模式的集合类和实现往往是主要的罪魁祸首。内存管理的一个后果是,如果任何对象持有对某个对象的引用,则无论您是否打算再次使用该对象,该对象都将保留在内存中。这可能导致对象在内存中停留的时间比需要的时间长得多(甚至可能在程序运行期间)。
如果引用非托管对象,也可能会遇到问题。有许多可能的解决方案;例如,C用Dispose模式来解决这个问题。但事实上,引入非托管对象使您最终可能发生实际内存泄漏。