我相信解释围绕这个问题的背景只会让事情变得混乱,所以我会直截了当地追逐:
如果Android应用程序通过JNI分配少量本机内存,然后丢失对该内存的引用(即,对管理该本机内存的对象的变量引用变为null,并且如果尝试使用该引用将抛出空指针异常他们):
>如果在应用程序的整个生命周期中发生一次且仅一次,这真的是一件大事吗?
>最终记忆是否会被覆盖并因此被收回?
我知道允许内存泄漏是一种不好的做法.坦率地说,我完全理解这一点.但是,我也知道,在极少数情况下应该打破规则(用有效的Java来解释约书亚布洛赫的话).恭敬地,我不想讨论为什么我这样做,我只是寻求这个具体问题的答案.
谢谢!!!
克里斯
最佳答案
Is it really a big deal if this occurs once and only once during the entire life cycle of the app?
对于大多数人来说,这将取决于“少量的本机记忆”对你意味着什么.如果我们谈论的是几KB,那么当它丢失一次时我就不会担心它.另一方面,如果我们谈论几MB,那么事情可能就不同了……
也就是说,有一个已知的内存泄漏是潜在的设计问题的迹象,也可能导致其他问题.如果未来的重构改变了应用程序的体系结构,它也可能成为一个问题.
Won’t the memory eventually be overwritten and thus reclaimed anyway?
当然……最终.当进程终止时,内核将释放所有已分配的资源.我并不熟悉Android的内部工作方式,但据我所知,流程往往比桌面Linux系统更长久.对于内存很少且没有交换空间的嵌入式设备,这可能是个问题 – 特别是如果所有应用程序编写者都开始在整个地方发生内存泄漏.