当前位置:首页 > 科技  > 软件

Android应用开发中largeHeap属性的妙用与潜在风险

来源: 责编: 时间:2024-04-25 08:57:27 245观看
导读largeHeap是Android开发中的一个属性,主要作用是向系统请求为App进程的虚拟机分配更大的堆内存空间。在manifest文件的application节点或activity节点中使用。largeHeap属性设置为true时,应用可以使用更大的堆内存。具

largeHeap是Android开发中的一个属性,主要作用是向系统请求为App进程的虚拟机分配更大的堆内存空间。在manifest文件的application节点或activity节点中使用。largeHeap属性设置为true时,应用可以使用更大的堆内存。具体能为虚拟机分配多大的堆内存,取决于当前设备的相关配置,由dalvik.vm.heapsize后面的配置大小限制。X1628资讯网——每日最新资讯28at.com

在Android开发中,官方建议开发者应努力减少内存的使用,采用回收和复用的方法,而不是通过增大内存来解决内存问题。当内存过大时,每次垃圾回收(gc)的时间也会变长,可能导致性能下降。X1628资讯网——每日最新资讯28at.com

largeHeap具体分配大小

largeHeap属性本身并不直接指定一个具体的内存大小。实际可以看做是一个用于向系统请求为应用进程分配更大的堆内存空间标志。具体能为虚拟机分配多大的堆内存,取决于当前设备的配置和系统的内存管理策略。X1628资讯网——每日最新资讯28at.com

在Android设备中,每个应用都会有一个内存最大值的限制。在应用的manifest文件中为某个activity或整个应用设置了largeHeap="true"后,这个应用或activity可以尝试使用比默认限制更大的堆内存。“更大”的堆内存具体有多大,并不是固定的,受到设备总内存、其他应用和系统服务的内存需求,以及Android版本和厂商定制等因素的影响。X1628资讯网——每日最新资讯28at.com

获取当前应用可以使用的最大堆内存大小方法:X1628资讯网——每日最新资讯28at.com

//如果largeHeap属性被设置为true,将返回一个比默认情况下更大的值。Runtime.getRuntime().maxMemory()//获得应用正常情况下内存的大小ActivityManager.getMemoryClass();//获得开启largeHeap最大的内存大小ActivityManager.getLargeMemoryClass();

在/system/build.prop文件中,可以找到与内存管理相关的设置,如dalvik.vm.heapsize和dalvik.vm.heapgrowthlimit。定义了应用进程堆内存的默认大小和增长限制。X1628资讯网——每日最新资讯28at.com

通过adb shell查看:X1628资讯网——每日最新资讯28at.com

cat /system/build.prop

图片图片X1628资讯网——每日最新资讯28at.com

  • 「dalvik.vm.heapstartsize=8m」 相当于Java虚拟机的-Xms配置,用来设置堆内存的初始大小。
  • 「dalvik.vm.heapgrowthlimit=192m」 相当于虚拟机的-XX:HeapGrowthLimit配置,用来设置一个标准的应用的最大堆内存大小。一个标准的应用就是没有使用android:largeHeap属性的应用。
  • 「dalvik.vm.heapsize=512m」 相当于虚拟机的-Xmx配置,设置了使用android:largeHeap的应用的最大堆内存大小。
  • 「dalvik.vm.heaptargetutilizatinotallow=0.75」 相当于虚拟机的-XX:HeapTargetUtilization,用来设置当前理想的堆内存利用率。取值位于0与1之间,当GC进行完垃圾回收之后,Dalvik的堆内存会进行相应的调整,通常结果是当前存活的对象的大小与堆内存大小做除法,得到的值为这个选项的设置,即这里的0.75。注意,这只是一个参考值,Dalvik虚拟机也可以忽略此设置。
  • 「dalvik.vm.heapminfree=2m与dalvik.vm.heapmaxfree=8m」 前者对应的是-XX:HeapMinFree配置,用来设置单次堆内存调整的最小值。后者对应的是-XX:HeapMaxFree配置,用来设置单次堆内存调整的最大值。通常情况下,还需要结合上面的-XX:HeapTargetUtilization的值,才能确定内存调整时,需要调整的大小。

使用largeHeap属性弊端

largeHeap会增加应用的内存使用。虽然可以帮助解决某些OutOfMemoryError(OOM)的问题,但也可能导致系统垃圾回收(GC)的时间变长。垃圾回收是Android系统用于清理不再使用的内存的过程,当堆内存变得更大时,这个过程可能需要更长的时间。可能导致应用在执行某些任务时变得卡顿,尤其是在进行复杂的UI操作时,如RecyclerView的滑动可能会变得异常缓慢。X1628资讯网——每日最新资讯28at.com

过度使用largeHeap可能会对整个系统的性能产生负面影响。如果每个应用都请求更多的内存,那么系统可用的总内存就会减少。可能导致系统需要更频繁地进行内存管理操作,如内存交换或杀死后台进程,以释放足够的内存给前台应用。不仅可能影响前台应用的性能,还可能影响用户的多任务体验。X1628资讯网——每日最新资讯28at.com

依赖largeHeap来解决内存问题并不是一种长期或可持续的解决方案。更好的做法应该是优化应用的内存使用,确保应用能够高效地管理其内存资源。X1628资讯网——每日最新资讯28at.com

largeHeap属性并不能保证应用一定能够获得更多的内存。即使设置了largeHeap="true",系统仍然会根据设备的总内存、其他应用的内存需求以及系统的内存管理策略来决定实际分配给应用的内存大小。X1628资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-85373-0.htmlAndroid应用开发中largeHeap属性的妙用与潜在风险

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: C#中编写系统操作日志的实践

下一篇: Java对象不再使用时,为什么要赋值为 null ?

标签:
  • 热门焦点
  • 轿车从天而降电动车主被撞身亡 超速抢道所致:现场视频让网友吵翻

    近日,上海青浦区法院判决轿车从天而降电动车主被撞身亡案,轿车车主被判有期徒刑一年。案件显示当时男子驾驶轿车在上海某路段行驶,前车忽然转弯提速超车,
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 在线图片编辑器,支持PSD解析、AI抠图等

    自从我上次分享一个人开发仿造稿定设计的图片编辑器到现在,不知不觉已过去一年时间了,期间我经历了裁员失业、面试找工作碰壁,寒冬下一直没有很好地履行计划.....这些就放在日
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。“提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己“当家”的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的“征求意见版”:1、取消P序列
  • 3699元!iQOO Neo8 Pro顶配版今日首销:1TB UFS 4.0同价位唯一

    5月23日,iQOO推出了全新的iQOO Neo8系列,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更是首发搭载了联发科天玑9200+旗舰
  • 联想小新Pad Pro 12.6将要推出,搭载高通骁龙 870 处理器

    联想小新Pad Pro 12.6将于秋季新品会上推出,官方按照惯例直接在发布会前给出了机型的所有参数。联想小新 Pad Pro 12.6 将搭载高通骁龙 870 处理器,重量为 5
Top