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

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

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

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

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

largeHeap具体分配大小

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

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

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

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

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

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

cat /system/build.prop

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 帅气纯真少年!日本最帅初中生选美冠军出炉

    日本第一帅哥初一生选美大赛冠军现已正式出炉,冠军是来自千叶县的宗田悠良。日本一直热衷于各种选美大赛,从“最美JK”起到“最美女星&r
  • Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 三言两语说透设计模式的艺术-单例模式

    写在前面单例模式是一种常用的软件设计模式,它所创建的对象只有一个实例,且该实例易于被外界访问。单例对象由于只有一个实例,所以它可以方便地被系统中的其他对象共享,从而减少
  • 消费结构调整丨巨头低价博弈,拼多多还卷得动吗?

    来源:征探财经作者:陈香羽随着流量红利的退潮,电商的存量博弈越来越明显。曾经主攻中高端与品质的淘宝天猫、京东重拾“低价”口号。而过去与他们错位竞争的拼多多,靠
  • 阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的“征求意见版”:1、取消P序列
  • 东方甄选单飞:有些鸟注定是关不住的

    作者:彭宽鸿来源:华尔街科技眼‍‍‍‍‍‍‍‍‍‍东方甄选创始人俞敏洪带队的“7天甘肃行”直播活动已在近日顺利收官。成立后一
  • OPPO K11评测:旗舰级IMX890加持 2000元档最强影像手机

    【Techweb评测】中端机型用户群体巨大,占了中国目前手机市场的大头,一直以来都是各手机品牌的“必争之地”,其中OPPO K系列机型一直以来都以高品质、
  • 北京:科技教育体验基地开始登记

      北京“科技馆之城”科技教育体验基地登记和认证工作日前启动。首批北京科技教育体验基地拟于2023年全国科普日期间挂牌,后续还将开展常态化登记。  北京科技教育体验基
Top