当前位置:首页 » 安卓系统 » android内存释放

android内存释放

发布时间: 2023-01-15 15:41:20

㈠ 如何管理Android手机剩余内存

大家知道要如何管理Android手机剩余内存吗?管理Android手机剩余内存有什么方法?下面一起来看看!

其实大家不用那么在意android手机剩余内存的大小。

很多人都是把使用其他系统的习惯带到了android手机上,不是所有的智能手机系统都一样的。android大多数应用没有退出的设计其实是有道理的,这和系统对进程的调度机制有关系。如果你知道java,就能更清楚这机制了。其实和java的垃圾回收机制类似,系统有一个规则来回收内存。进行内存调度有个阀值,只有低于这个值系统才会按一个列表来关闭用户不需要的东西。当然这个值默认设置得很小,所以你会看到内存老在很少的数值徘徊。但事实上他并不影响速度。相反加快了下次启动应用的速度。这本来也是android的优势之一,如果人为去关闭进程,没有太大必要。特别是自动关进程的软件。

为什么内存少的时候运行大型程序会慢呢?

其实很简单,在内存剩余不多时打开大型程序,会触发系统自身的调进程调度策略,这是十分消耗系统资源的操作,特别是在一个程序频繁向系统申请内存的时候。这种情况下系统并不会关闭所有打开的进程,而是选择性关闭,频繁的调度自然会拖慢系统。

进程管理软件到底还有存在的价值吗?

其实还是有的,在运行大型程序之前,你可以手动关闭一些进程释放内存,可以显着的提高运行速度。但一些小程序,完全可交由系统自己管理。很多朋友还有个疑问,如果不关程序是不是会更耗电?这里也解释一下,android的应用在被切换到后台时,它其实已经被暂停了,并不会消耗cpu资源,只保留了运行状态。所以为什么有的程序切出去重新进入,还会到主界面。但是,一个程序如果想要在后台处理些东西,如音乐播放,它就会开启一个服务,服务可在后台持续运行,所以在后台耗电的也只有带服务的应用了。这个在进程管理软件里能看到,名字是service。所以没有带服务的应用在后台是完全不耗电的,没有必要关闭。这种设计本来就是一个非常好的设计,下次启动程序时,会更快,因为不需要读取界面资源,何必要关掉他们抹杀这个android的优点呢?

为什么android应用看起来那么耗内存?

大家知道,android上的应用是java,当然需要虚拟机,而android上的应用是带有独立虚拟机的,也就是每开一个应用就会打开一个独立的虚拟机。这样设计的原因是可以避免虚拟机崩溃导致整个系统崩溃,但代价就是需要更多内存。

至于为什么开了大程序或者开了好几个程序之后切换会变慢,具体分析如下:

已经开启了一个大程序,占用70%内存,如果再想运行一个程序,此时还需要50%的内存,则就需要一个从大程序占用的内存中释放或者压缩的过程,所以表现出来的就是慢一会儿。

已经开启了几个程序共占用内存80%,运行新程序时又需要20%的内存,系统内存因为没见过剩余0的时候,也就是应该剩一部分空闲内存,那么就需要从之前开启的这几个程序中选择一个或者几个来关闭,这一过程也需要耗费系统资源,所以会慢一会儿。也就是说你手动去结束程序的时候,就是替系统在释放内存,就算你不去结束,在需要内存的时候系统也会自动结束程序释放内存。

不在后台运行的程序(没服务的),即使不结束也不会耗电。在后台运行的(有服务的`)程序,如一些播放器或实时监控的软件,自然会耗电。这就说明结束进程并不是没用,我们只需要看哪个带服务耗电哪个程序后台一直在运行,看服务就能看出来,这样的软件如果用不到的时候就结束了吧。

以QQ举例,正常的退出,会在进程管理里留下qq的运行过的状态,但不耗电不占 cpu,如果你只是切换出去(按房子键而不是退出)那么自然会耗电,因为程序还在运行,QQ还在线呢。

这里就有个要注意的地方了,虽然房子键和那个返回键都可以将程序切换出去,但是两者的效果差异是很大的,返回键可以视作程序已经退出了,而按房子键,则是将程序切换到了后台来运行,软件并没有退出哦!

以上这些设计都是为了确保了android的稳定性,正常情况下最多单个程序崩溃,但整个系统不会崩溃,也永远没有内存不足的提示出现。大家可能是被windows毒害得太深了,总想保留更多的内存,但实际上这并不一定会提升速度,相反却丧失了程序启动快的这一系统特色,得不偿失。大家不妨换种观念习惯来使用android系统。


㈡ Android系统内存管理

部分内容出至林学森的Android内核设计思想。
Android官网内存管理
部分出至 https://www.jianshu.com/p/94d1cd553c44

Android本质是Linux所以先从Linux说起。

Linux的内存管理为系统中所有的task提供可靠的内存分配、释放和保护机制。
核心:
虚拟内存
内存分配与释放
内存保护

将外存储器的部分空间作为内存的扩展,如从硬盘划出4GB大小。
当内存资源不足时,系统按照一定算法自动条形优先级低的数据块,并把他们存储到硬盘中。
后续如果需要用到硬盘中的这些数据块,系统将产生“缺页”指令,然后把他们交换回内存中。
这些都是由操作系统内核自动完成的,对上层应用”完全透明“。

每个进程的逻辑地址和物理地址都不是直接对应的,任何进程都没办法访问到它管辖范围外的内存空间——即刻意产生的内存越界与非法访问,操作系统也会马上阻止并强行关闭程序,从而有力的保障应用程序和操作系统的安全和稳定。

一旦发现系统的可用内存达到临界值,机会按照优先级顺序,匆匆低到高逐步杀掉进程,回收内存。
存储位置:/proc/<PID>/oom_score
优先级策略:
进程消耗的内存
进程占用的CPU时间
oom_adj(OOM权重)

Android平台运行的前提是可用内存是浪费的内存。它试图在任何时候使用所有可用的内存。例如,系统会在APP关闭后将其保存在内存中,以便用户可以快速切换回它们。出于这个原因,Android设备通常运行时只有很少的空闲内存。在重要系统进程和许多用户应用程序之间正确分配内存内对存管理是至关重要。
Android有两种主要的机制来处理低内存的情况:内核交换守护进程(kernel swap daemon)和低内存杀手(low-memory killer)。

当用户在APP之间切换时,Android会在最近使用的(LRU)缓存中保留不在前台的APP,即用户看不到的APP,或运行类似音乐播放的前台服务。如果用户稍后返回APP,系统将重用该进程,从而使APP切换更快。
如果你的APP有一个缓存进程,并且它保留了当前不需要的内存,那么即使用户不使用它,你的APP也会影响系统的整体性能。由于系统内存不足,它会从最近使用最少的进程开始杀死LRU缓存中的进程。该系统还负责处理占用最多内存的进程,并可以终止这些进程以释放RAM。
当系统开始终止LRU缓存中的进程时,它主要是自底向上工作的。系统还考虑哪些进程消耗更多的内存,从而在终止时为系统提供更多的内存增益。你在LRU列表中消耗的内存越少,你就越有可能留在列表中并能够快速恢复。

为了满足RAM的所有需求,Android尝试共享RAM来跨进程通信。它可以做到以下方式:

Android设备包含三种不同类型的内存:RAM、zRAM和storage。
注意:CPU和GPU都访问同一个RAM。

内存被拆分成页。通常每页有4KB的内存。
页面被认为是空闲的或已使用的。
空闲页是未使用的RAM。
已使用页是系统正在积极使用的RAM,分为以下类别:

干净的页面(Clean pages)包含一个文件(或文件的一部分)的一份精确副本存在存储器上。当一个干净的页面不再包含一个精确的文件副本(例如,来自应用程序操作的结果)时,它就变成了脏页。可以删除干净的页,因为它们始终可以使用存储中的数据重新生成;不能删除脏页(Dirty pages),否则数据将丢失。

内核跟踪系统中的所有内存页。

当确定一个应用程序正在使用多少内存时,系统必须考虑shared pages。APP访问相同的服务或库将可能共享内存页。例如,Google Play Services 和一个游戏APP可能共享一个位置服务。这使得很难确定有多少内存属于这个服务相对于每个APP。

当操作系统想要知道所有进程使用了多少内存时,PSS非常有用,因为页面不会被多次计数。PSS需要很长时间来计算,因为系统需要确定哪些页面是共享的,以及被有多少进程。RSS不区分共享页面和非共享页面(使计算速度更快),更适合于跟踪内存分配的更改。

内核交换守护进程(kswapd)是Linux内核的一部分,它将使用过的内存转换为空闲内存。当设备上的空闲内存不足时,守护进程将变为活动状态。Linux内核保持低和高的可用内存阈值。当空闲内存低于低阈值时,kswapd开始回收内存。当空闲内存达到高阈值,kswapd将停止回收内存。
kswapd可以通过删除干净的页面来回收干净的页面,因为它们有存储器支持并且没有被修改。如果进程试图寻址已删除的干净页,则系统会将该页从存储器复制到RAM。此操作称为请求分页。

kswapd将缓存的私有脏页(private dirty pages)和匿名脏页(anonymous dirty pages)移动到zRAM进行压缩。这样做可以释放RAM中的可用内存(空闲页)。如果进程试图触摸zRAM中脏页,则该页将被解压缩并移回RAM。如果与压缩页关联的进程被终止,则该页将从zRAM中删除。
如果可用内存量低于某个阈值,系统将开始终止进程。

lmkd实现源码要在system/core/lmkd/lmkd.c。
lmkd会创建名为lmkd的socket,节点位于/dev/socket/lmkd,该socket用于跟上层framework交互。

小结:
LMK_TARGET: AMS.updateConfiguration() 的过程中调用 updateOomLevels() 方法, 分别向/sys/mole/lowmemorykiller/parameters目录下的minfree和adj节点写入相应信息;
LMK_PROCPRIO: AMS.applyOomAdjLocked() 的过程中调用 setOomAdj() 向/proc/<pid>/oom_score_adj写入oom_score_adj后直接返回;
LMK_PROCREMOVE: AMS.handleAppDiedLocked 或者 AMS.() 的过程,调用remove(),目前不做任何事,直接返回;

为了进一步帮助平衡系统内存并避免终止APP进程,可以Activity类中实现ComponentCallbacks2接口。提供的onTrimMemory()回调方法允许APP在前台或后台侦听与内存相关的事件,然后释放对象以响应应用程序生命周期或表明系统需要回收内存的系统事件。
onTrimMemory()回调是在Android 4.0(API级别14)中添加的。
对于早期版本,可以使用onLowMemory(),它大致相当于TRIM_MEMORY_COMPLETE事件。

一个专门的驱动。(Linux Kernel 4.12 已移除交给kswapd处理)。
很多时候,kswapd无法为系统释放足够的内存。在这种情况下,系统使用onTrimMemory()通知APP内存不足,应该减少其分配。如果这还不够,内核将开始终止进程以释放内存,它使用低内存杀手(LMK)来完成这个任务。
为了决定要终止哪个进程,LMK使用一个名为oom_adj_score的“out of memory”分数来确定运行进程的优先级,高分的进程首先被终止。
后台应用程序首先被终止,系统进程最后被终止。
下表列出了从高到低的LMK评分类别。第一排得分最高的项目将首先被杀死:

Android Runtime(ART)和Dalvik虚拟机使用分页(Paging)和内存映射(mmapping)来管理内存。应用程序通过分配新对象或触摸已映射页面来修改内存都将保留在RAM中,并且不能被调出。应用程序释放内存的唯一方式是垃圾收集器。

㈢ 如何清理释放Android手机内存空间

方法是:
1、下载安装手机管理软件,如猎豹清理大师、或91手机助手,对缓存、系统、卸载残留实现进一步清理;
2、需要对不常用的软件进行卸载清理,释放内存,可通过91手机助手、或猎豹清理大师,将应该软件“移至SD卡”,释放内存空间;
3、对手机浏览器进行设置,将下载位置改为保存到SD卡上;
4、进入拍照状态,在拍照界面进入相机设置,将相片保存位设为“SD卡”。
5、微信清理,方法是:
微信保存的视频在Tencent/MicroMsg中对应每个人的目录下,
(1)
将手机连接到电脑。
(2)打开手机存储卡,找到tencent/MicroMsg文件夹
(3)里面有一个或者多个由一长串数字和字母组成的文件夹,与该手机登录过的微信账号一一对应。
(4)打开这些文件夹,video是视频,image是缓存和保存的图片,voice是语音。
需要的,保存到电脑上;不需要的,全部删除,即可释放好几G的空间。
6、如果上述办法仍不行,建议:做好手机资料备份,重置手机,恢复出厂设置,这一招相当管用、彻底!

㈣ android 清理内存的方法

  • 1.打开手机,找到手机的“设置”。

    • 2.找到“应用管理”,点击进入。

      • 3.找到“全部”,点击任意应用,然后清理应用中的“清理缓存”。

        • 4.所用手机应用都可以这样来清理手机缓存的。

          备注:最简单粗鲁的办法就是关机重启手机,手机就不太卡了

        ㈤ 如何清理释放Android手机内存空间

        另外还有一些程序像Widgets,动态壁纸和一些系统程序,如果安装在SD卡根本无法正常工作,内存不足依然是让很多用户感到棘手的问题。
        不过Android作为一种优秀的移动操作系统,提供了几种可以清理和释放内存空间的办法,我们总结了下面几点希望可以帮助用户解决燃眉之急。
        清理大型应用程序的缓存数据
        1、通过清理程序的缓存文件,释放的内存空间会让你喜出望外。
        2、进入手机设置选项,选择设置应用程序管理应用程序。
        3、按一下Menu键,选择“按大小排序”选项(如果是Android2.2手机先要选择已下载标签),然后就可以按照应用程序大小排列所有手机安装的应用程序。
        4、点击一款列表中的应用程序,如果程序有缓存文件可以显示大小,直接点击“清除缓存”选项就可以释放这些缓存文件占据的空间。
        5、有一些应用程序的缓存文件可能多达数MB,比如GoogleMaps,Market,浏览器和相册程序,清理这几个程序的缓存文件就可以释放相当可观的空间。
        6、很多手机厂商都在旗下手机预装了自己开发的UI程序,比如HTCSense,MOTOBLUR等,如果你打算使用LaunherPro或者ADW这样的launcher程序替代HTCSense,你可以清理甚至删除HTCSense的数据文件,这个操作可以让你的手机多出几十MB空间。
        7、另外AndroidMarket还提供一些自动清除缓存文件的应用程序,比如QuickAppCleanCache这款收费软件。
        对于已经取得root权限的手机用户,可以从Market下载CacheCleaner,CacheMate和MoveCache这些程序来快速方便的清除程序缓存文件。
        删除那些你从来不用或者很少使用的应用程序
        这是很多用户都会面对的问题,默默忍受着手机内存不足的报警,甚至牺牲系统性能,就是舍不得删除那些从来不用或者极少使用的应用程序,这可能也是一种强迫症。
        删除这些程序你会发现手机从此海阔天空,而且你没有任何损失。
        移动所以可以移动的应用程序数据到SD卡
        运行Android2.2系统的手机支持安装应用程序到SD卡,确保检查所有你安装的应用程序如果支持appstoSD卡功能一定要移动到SD卡,对于一些大型软件特别是游戏程序节省的容量相当可观。
        不过一定要注意Widgets程序,捆绑Widgets的程序,以及动态壁纸程序和那些需要在后台运行并且和系统进行交互的应用程序不要移动到SD卡存储,否则程序可能无法正常工作。
        如果觉得每个程序单独设置太麻烦,可以借助Apps2SD和SDMove这样的程序简化*********程。

        ㈥ android开发 怎么释放activity的全部内存

        假如现在有三个activity,分别是main,a 和b .
        a和b都是需要很大内存的,在main中打开a或b,在a或b中直接按返回键,或者直接调用finish,回到main后通过update heap观察刚才打开的activity占用的资源可以很快释放,如果是setResul后再调用finish回到main,发现内存被释放的事件要稍微久一些。
        第二个问题,在main中打开a,然后在a中startActivity打开b,然后a.finish,这个时候观察a的内存并没有释放。如果在b中调用finish返回main后,a和b的内存就会被释放掉。

        ㈦ Android手机清理内存的方法

        和PC用户一样智能手机用户也会遇到手机存储不足的问题,对于Android手机来说因为系统不支持安装程序到SD卡,手机配置的存储容量也有限,很多用户都碰到过安装程序太多系统内存不足的问题。虽然Android2.2系统开始已经支持Apps2SD功能,但是很多用户使用后发现Android2.2系统下仍然有很多应用程序无法安装到SD卡,即可程序支持移动到SD卡,但是还会保留一部分系统文件和隐私文件在手机内存里。另外还有一些程序像Widgets,动态壁纸和一些系统程序,如果安装在SD卡根本无法正常工作,内存不足依然是让很多用户感到棘手的问题。不过Android作为一种优秀的移动操作系统,提供了几种可以清理和释放内存空间的办法,我们总结了下面几点希望可以帮助用户解决燃眉之急。

        清理大型应用程序的缓存数据。

        1、通过清理程序的缓存文件,释放的内存空间会让你喜出望外。

        2、进入手机设置选项,选择设置>应用程序>管理应用程序。

        3、按一下Menu键,选择“按大小排序”选项(如果是Android2.2手机先要选择已下载标签),然后就可以按照应用程序大小排列所有手机安装的应用程序。

        4、点击一款列表中的应用程序,如果程序有缓存文件可以显示大小,直接点击“清除缓存”选项就可以释放这些缓存文件占据的空间。

        5、有一些应用程序的缓存文件可能多达数MB,比如GoogleMaps,Market,浏览器和相册程序,清理这几个程序的缓存文件就可以释放相当可观的空间。

        6、很多手机厂商都在旗下手机预装了自己开发的UI程序,比如HTCSense,MOTOBLUR等,如果你打算使用LaunherPro或者ADW这样的launcher程序替代HTCSense,你可以清理甚至删除HTCSense的数据文件,这个操作可以让你的'手机多出几十MB空间。

        7、另外AndroidMarket还提供一些自动清除缓存文件的应用程序,比如QuickAppCleanCache这款收费软件。对于已经取得root权限的手机用户,可以从Market下载CacheCleaner,CacheMate和MoveCache这些程序来快速方便的清除程序缓存文件。

        删除那些你从来不用或者很少使用的应用程序这是很多用户都会面对的问题,默默忍受着手机内存不足的报警,甚至牺牲系统性能,就是舍不得删除那些从来不用或者极少使用的应用程序,这可能也是一种强迫症。删除这些程序你会发现手机从此海阔天空,而且你没有任何损失。移动所以可以移动的应用程序数据到SD卡运行Android2.2系统的手机支持安装应用程序到SD卡,确保检查所有你安装的应用程序如果支持appstoSD卡功能一定要移动到SD卡,对于一些大型软件特别是游戏程序节省的容量相当可观。

        不过一定要注意Widgets程序,捆绑Widgets的程序,以及动态壁纸程序和那些需要在后台运行并且和系统进行交互的应用程序不要移动到SD卡存储,否则程序可能无法正常工作。如果觉得每个程序单独设置太麻烦,可以借助Apps2SD和SDMove这样的程序简化操作过程。对于那些动手能力比较强的用户可以通过网上的教程设置应用程序默认安装到SD卡,这样就可以一劳永逸。

        ㈧ 如何清理释放Android手机内存空间

        方法是:
        1、下载安装手机管理软件,如猎豹清理大师、或91手机助手,对缓存、系统、卸载残留实现进一步清理;
        2、需要对不常用的软件进行卸载清理,释放内存,可通过91手机助手、或猎豹清理大师,将应该软件“移至SD卡”,释放内存空间;
        3、对手机浏览器进行设置,将下载位置改为保存到SD卡上;
        4、进入拍照状态,在拍照界面进入相机设置,将相片保存位设为“SD卡”。
        5、微信清理,方法是:
        微信保存的视频在Tencent/MicroMsg中对应每个人的目录下,
        (1) 将手机连接到电脑。
        (2)打开手机存储卡,找到tencent/MicroMsg文件夹。
        (3)里面有一个或者多个由一长串数字和字母组成的文件夹,与该手机登录过的微信账号一一对应。
        (4)打开这些文件夹,video是视频,image是缓存和保存的图片,voice是语音。
        需要的,保存到电脑上;不需要的,全部删除,即可释放好几G的空间。
        6、如果上述办法仍不行,建议:做好手机资料备份,重置手机,恢复出厂设置,这一招相当管用、彻底!

        热点内容
        php内存优化 发布:2025-07-04 17:25:54 浏览:660
        威纶触摸屏如何设置时间限制密码 发布:2025-07-04 17:25:50 浏览:416
        python列表的遍历 发布:2025-07-04 17:24:20 浏览:20
        编译基本块 发布:2025-07-04 17:23:06 浏览:746
        scl语言编程 发布:2025-07-04 17:23:05 浏览:989
        oracle用户连接数据库连接 发布:2025-07-04 17:20:20 浏览:938
        我的世界纯生存服务器推荐死亡不掉落 发布:2025-07-04 17:06:14 浏览:346
        方舟编译器可以用于p20吗 发布:2025-07-04 17:00:17 浏览:784
        短片解压 发布:2025-07-04 16:50:08 浏览:736
        全工作服务器如何省电 发布:2025-07-04 16:46:00 浏览:993