2013-06-20 15 views
0

我最近问,鉴于如下界面如下创建给定一个接口内存泄漏符合

,写一个类,将导致内存泄漏每次处理器#DoSomething的(字符串)被调用,并解释为什么它这样做。

public interface Processor { 
    void doSomething(String msg); 
} 

我不确定在Java中存在与C/C++相同的内存泄漏。这里的界面有什么意义。

另外,我从来没有见过#用于调用方法。

有人可以向我解释这个吗?谢谢

+0

您应该从@Doorknob上面给出的链接开始。 –

+3

'#'只是一个符号。您在实际的Java源代码中看不到这一点。 http://stackoverflow.com/q/11247793/139010 –

+0

我确实看到了一些对内存泄漏的引用。我想知道接口。接口的意义是什么? – rpat

回答

0

一个简单的实现将有一个static列表,当调用doSomething时,只要继续添加输入String到列表。之所以会这样,是因为你将一个强引用(通过静态成员)存储到字符串中,因此字符串不能被垃圾收集。

+1

当你仍然拥有强大的参考,那么它不是一个记忆泄漏。这只是一个泄漏,如果你有更长的时间有任何参考,但该对象仍然不会得到g/ced。 – Polygnome

+0

这与C/C++感觉中的内存泄漏不同,它的程序无法访问已泄漏的内存。在这里你可以访问内存。 – rpat

+0

@polygnome,这是不正确的。传统的Java使用是指被引用但不再需要的对象是泄漏。 –