当我在C ++中使用指针创建一个新对象时,我需要在完成时或将此指针移动到另一个对象时将其删除以避免内存泄漏。 Java中的new Some_Object
是这样的吗?
Some_Object o1 = new Some_Object("oj1");
o1 = new Some_Object("oj2"); // do this make memory leak in Java?
答案 0 :(得分:7)
简而言之,没有。 Java有一个内置(和强制)垃圾收集器。 C ++没有。
一旦Object
无法再访问(在Java中),它就有资格进行垃圾回收(并且收集器可以释放内存)。
答案 1 :(得分:2)
Java等内存管理语言中的“内存泄漏”与C ++中的内容完全不同,因为Java不要求您明确释放已分配的内存。
据说,你可以通过基本相同的效果。观察者模式的集合类和实现往往是这方面的主要罪魁祸首。内存管理的一个后果是,如果任何对象持有对象的引用,则无论您是否打算再次使用它,该对象都将保留在内存中。这可能导致对象在内存中停留的时间比必要时间长(甚至可能在程序的持续时间内)。
如果引用非托管对象,也可能遇到问题。有很多可能的解决方案;例如,C#使用Dispose Pattern解决了这个问题。但事实是,引入非托管对象可能会导致实际的内存泄漏。