largeHeap是Android开发中的一个属性,主要作用是向系统请求为App进程的虚拟机分配更大的堆内存空间。在manifest文件的application节点或activity节点中使用。largeHeap属性设置为true时,应用可以使用更大的堆内存。具体能为虚拟机分配多大的堆内存,取决于当前设备的相关配置,由dalvik.vm.heapsize后面的配置大小限制。
在Android开发中,官方建议开发者应努力减少内存的使用,采用回收和复用的方法,而不是通过增大内存来解决内存问题。当内存过大时,每次垃圾回收(gc)的时间也会变长,可能导致性能下降。
largeHeap属性本身并不直接指定一个具体的内存大小。实际可以看做是一个用于向系统请求为应用进程分配更大的堆内存空间标志。具体能为虚拟机分配多大的堆内存,取决于当前设备的配置和系统的内存管理策略。
在Android设备中,每个应用都会有一个内存最大值的限制。在应用的manifest文件中为某个activity或整个应用设置了largeHeap="true"后,这个应用或activity可以尝试使用比默认限制更大的堆内存。“更大”的堆内存具体有多大,并不是固定的,受到设备总内存、其他应用和系统服务的内存需求,以及Android版本和厂商定制等因素的影响。
获取当前应用可以使用的最大堆内存大小方法:
//如果largeHeap属性被设置为true,将返回一个比默认情况下更大的值。Runtime.getRuntime().maxMemory()//获得应用正常情况下内存的大小ActivityManager.getMemoryClass();//获得开启largeHeap最大的内存大小ActivityManager.getLargeMemoryClass();
在/system/build.prop文件中,可以找到与内存管理相关的设置,如dalvik.vm.heapsize和dalvik.vm.heapgrowthlimit。定义了应用进程堆内存的默认大小和增长限制。
通过adb shell查看:
cat /system/build.prop
图片
largeHeap会增加应用的内存使用。虽然可以帮助解决某些OutOfMemoryError(OOM)的问题,但也可能导致系统垃圾回收(GC)的时间变长。垃圾回收是Android系统用于清理不再使用的内存的过程,当堆内存变得更大时,这个过程可能需要更长的时间。可能导致应用在执行某些任务时变得卡顿,尤其是在进行复杂的UI操作时,如RecyclerView的滑动可能会变得异常缓慢。
过度使用largeHeap可能会对整个系统的性能产生负面影响。如果每个应用都请求更多的内存,那么系统可用的总内存就会减少。可能导致系统需要更频繁地进行内存管理操作,如内存交换或杀死后台进程,以释放足够的内存给前台应用。不仅可能影响前台应用的性能,还可能影响用户的多任务体验。
依赖largeHeap来解决内存问题并不是一种长期或可持续的解决方案。更好的做法应该是优化应用的内存使用,确保应用能够高效地管理其内存资源。
largeHeap属性并不能保证应用一定能够获得更多的内存。即使设置了largeHeap="true",系统仍然会根据设备的总内存、其他应用的内存需求以及系统的内存管理策略来决定实际分配给应用的内存大小。
本文链接:http://www.28at.com/showinfo-26-85373-0.htmlAndroid应用开发中largeHeap属性的妙用与潜在风险
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
上一篇: C#中编写系统操作日志的实践