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

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

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

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

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

largeHeap具体分配大小

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

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

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

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

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

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

cat /system/build.prop

图片图片wj128资讯网——每日最新资讯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的滑动可能会变得异常缓慢。wj128资讯网——每日最新资讯28at.com

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • 零售大模型“干中学”,攀爬数字化珠峰

    文/侯煜编辑/cc来源/华尔街科技眼对于绝大多数登山爱好者而言,攀爬珠穆朗玛峰可谓终极目标。攀登珠峰的商业路线有两条,一是尼泊尔境内的南坡路线,一是中国境内的北坡路线。相
  • 2023年,我眼中的字节跳动

    此时此刻(2023年7月),字节跳动从未上市,也从未公布过任何官方的上市计划;但是这并不妨碍它成为中国最受关注的互联网公司之一。从2016-17年的抖音强势崛起,到2018年的“头腾
  • 消费结构调整丨巨头低价博弈,拼多多还卷得动吗?

    来源:征探财经作者:陈香羽随着流量红利的退潮,电商的存量博弈越来越明显。曾经主攻中高端与品质的淘宝天猫、京东重拾“低价”口号。而过去与他们错位竞争的拼多多,靠
  • 品牌洞察丨服务本地,美团直播成效几何?

    来源:17PR7月11日,美团App首页推荐位出现“美团直播”的固定入口。在直播聚合页面,外卖“神枪手”直播间、美团旅行直播间、美团买菜直播间等均已上线,同时
  • 华为开发者大会2023日程公开:开设鸿蒙HarmonyOS 4体验区

    IT之家 7 月 31 日消息,华为今日公布了 HDC.Together 开发者大会 2023 的详细日程。整场大会将于 8 月 4 日-6 日之间举行,届时将发布最新一代鸿蒙 H
  • Android 14发布:首批适配机型公布

    5月11日消息,谷歌在今天凌晨举行了I/O大会,本次发布会谷歌带来了自家的AI语言模型PaLM 2、谷歌Pixel Fold折叠屏、谷歌Pixel 7a手机,同时发布了Androi
  • 亲历马斯克血洗Twitter,硅谷的苦日子在后头

    文/刘哲铭  编辑/李薇  马斯克再次挥下裁员大刀。  美国时间11月14日,Twitter约4400名外包员工遭解雇,此次被解雇的员工的主要工作为内容审核等。此前,T
Top