Android开发者文档,作为Project Svelte的一部分(座右铭:"你曾尝试将Bugdroid装入紧身牛仔裤吗?!?"),有一个关于管理你的应用程序内存的页面.它包含:
当用户导航到其他应用并且您的UI不再可见时,您应该释放仅由您的UI使用的所有资源.此时释放UI资源可以显着提高系统缓存进程的容量,这直接影响用户体验的质量.
和:
TRIM_MEMORY_RUNNING_LOW:您的应用程序正在运行且不被视为可用,但设备的内存运行速度要低得多,因此您应该释放未使用的资源以提高系统性能(这会直接影响应用程序的性能).
等等.
但是,如果"释放资源"实际上会以某种方式影响系统RAM,这些只会有意义.
我的印象是Dalvik VM表现得像Java VM一样(或者可能"做",如果他们在我不看的时候改变了它).AFAIK,Java VM分配系统RAM以增加堆大小但从不释放它 - 一旦分配,只要进程运行,它仍然是堆空间的一部分.
如果Dalvik VM的行为方式相同,那么我无法看到如何增加流程中未分配的堆空间量会对整体系统性能产生任何影响.现在,为我们的进程释放堆空间是一件好事,也许这样做会降低我们将来需要更多系统RAM的可能性......但这不是文档所暗示的.文档指出"此时释放UI资源可以显着提高系统缓存进程的容量"; 它没有说"此时释放UI资源没有立竿见影的效果,但将来有助于减少应用程序的系统RAM占用空间".
现在,如果指令告诉我们释放通过NDK分配的内存,那将是有意义的,因为它发生在Dalvik堆之外并且会影响系统RAM.但是文档没有得出这种区别.
除了终止进程之外,Dalvik VM是否实际将已分配的RAM释放回系统?如果是的话,何时?而且,在较小的程度上,考虑到垃圾收集器是非压缩和非复制的,它是如何完成的?
谢谢!