4

我相信解释这个问题的背景只会使事情变得混乱,所以我会直奔主题:

如果一个 Android 应用程序通过 JNI 分配了少量本机内存,然后失去了对该内存的引用(即,对管理该本机内存的对象的变量引用变为空,并且如果尝试使用将抛出空指针异常他们):

  1. 如果在应用程序的整个生命周期中仅发生一次,这真的很重要吗?

  2. 内存最终不会被覆盖并因此被回收吗?

我知道允许内存泄漏是一种不好的做法。坦率地说,我完全理解这一点。但是,我也知道在极少数情况下应该打破规则(套用来自 Effective Java 的 Joshua Bloch 的话)。恕我直言,我不想讨论我为什么要这样做,我只是寻求这个特定问题的答案。

谢谢你!!!克里斯

4

1 回答 1

2

如果在应用程序的整个生命周期中仅发生一次,这真的很重要吗?

对于大多数人来说,这取决于“少量本机内存”对您意味着什么。如果我们谈论的是几个 KB,那么当它丢失一次时我不会担心它。另一方面,如果我们谈论的是几个 MB,那么情况可能会有所不同......

也就是说,已知内存泄漏是潜在设计问题的标志,也可能导致其他问题。如果未来的重构改变了应用程序的架构,它也可能成为一个更大的问题。

内存最终不会被覆盖并因此被回收吗?

当然……最终。当进程终止时,内核将释放所有分配的资源。我并不真正熟悉 Android 的内部工作原理,但据我了解,进程往往比桌面 Linux 系统上的寿命更长。对于内存很少且没有交换空间的嵌入式设备,这可能是个问题——尤其是如果所有应用程序编写者都开始到处留下内存泄漏。

于 2013-02-27T16:56:37.613 回答