猿问

应用程序可以使用的最大RAM数量是多少?

我对这个与Android操作系统的内存管理有关的问题感到非常好奇,因此我希望就该主题提供一个非常详细的答案。


我想知道的是:


Android应用程序(非系统应用程序)可以使用的最大内存量(兆字节 / 占总RAM的百分比)是多少?

Android版本之间有什么区别吗?

关于设备制造商有什么区别吗?

最重要的是:


什么被视为/ 这是什么取决于当它涉及到系统中确定多少内存的应用程序可以在运行时使用(假设每个应用程序的内存最大是不是一个静态的数字)?

到目前为止(截至2013年)我所听到的:


早期的Android设备的每个应用上限为16MB

后来这个上限增加到24MB或32MB

是什么让我非常好奇:


这两个限制都非常低。


我刚刚下载了Android任务管理器,以检查设备的RAM。我已经注意到,有些应用程序使用大约40-50 MB的RAM,这比上面提到的最大RAM使用量(例如32 MB)要明显得多。那么Android如何确定一个应用可以使用多少RAM?应用程序怎么可能超过该限制?


此外,我注意到当使用大约30-40 MB时,我的某些应用程序崩溃了(被系统杀死了?),并出现OutOfMemoryException。另一方面,一段时间后(可能是由于内存泄漏),我的手机上使用的应用程序使用的内存为100 MB以上,并且不会崩溃或消失。因此,在确定可以保留多少RAM时,显然还取决于应用程序本身。这怎么可能?(我使用具有768 MB RAM的HTC One S进行了测试)


免责声明:我不以任何方式与Android Task Manager应用关联。


芜湖不芜
浏览 772回答 3
3回答

一只萌萌小番薯

Android应用程序(非系统应用程序)可以使用的最大内存量(以兆字节为单位/占总RAM的百分比)是多少?这因设备而异。getMemoryClass()onActivityManager将为您提供运行代码的设备的值。Android版本之间有什么区别吗?是的,这些年来,对操作系统的要求不断增加,并且设备必须进行调整以匹配。关于设备制造商是否存在差异?是的,只要制造商制造设备,并且大小随设备而异。在确定应用程序可以使用多少RAM时,要考虑哪些“附带因素”?我不知道什么是“附带条件”。早期的设备每个应用程序的上限为16MB;后来的设备增加到24MB或32MB没错。屏幕分辨率是一个重要的决定因素,因为更大的分辨率意味着更大的位图,因此平板电脑和高分辨率手机将倾向于具有更高的值。例如,您将看到具有48MB堆的设备,并且如果有更高的值,我也不会感到惊讶。应用程序怎么可能超过该限制?您假设该应用程序的作者知道他在做什么。考虑到Android核心工程师难以确定应用程序的内存使用情况,因此我不认为所讨论的应用程序必须提供特别准确的结果。话虽如此,本机代码(NDK)不受堆限制。而且,从Android 3.0开始,应用程序可以请求“大堆”,通常在数百MB范围内,但是对于大多数应用程序来说,这是较差的形式。此外,我注意到当使用大约30-40 MB时,我的某些应用程序会因OutOfMemoryException崩溃。请记住,Android垃圾收集器不是压缩垃圾收集器。确实应该有例外CouldNotFindSufficientlyLargeBlockOfMemoryException,但这可能被认为太罗y了。OutOfMemoryException意味着您不能分配所请求的块,而不是您已经用尽了整个堆。
随时随地看视频慕课网APP

相关分类

Android
我要回答