交换分区/文件将如何影响系统?


20

一些朋友告诉我,他们的Android手机对常规应用程序的可用内存很少(<100MB),因为操作系统和某些不可中断的服务占用了大部分RAM。例如,一部512MB的手机仅显示90MB的可用内存,因此只能同时运行2-3个应用程序。

我想知道创建交换分区/文件是否会有所帮助,但是我在网上看到的意见不一,我不确定该怎么做。这是我的问题:

(1)是否会有很多不经常使用的内存页面要交换出去,尤其是在OS和那些不可杀伤的服务中?

(2)换出小内存页将如何损害闪存的使用寿命?闪存(或SD卡?)是否自动进行损耗均衡?

(3)交换会在运行多个应用程序时真正提高性能吗?我假设如果(1)的答案是肯定的,那就可以。

(4)交换时写入闪存会不会太慢,从而损害响应能力?

(5)Android是否保持Linux内核的交换机制是否正确,因此只要存在交换分区/文件,它就会进行交换而无需额外配置?

谢谢阅读。

Answers:


8

我认为Android交换不会有太大好处,因为Android应用程序生命周期是一种更高级的交换形式。

(1)是否会有很多不经常使用的内存页面要交换出去,尤其是在OS和那些不可杀伤的服务中?

即使在台式机Linux中,您也无法交换OS内核,而Android在需要更多RAM时已经终止了服务。如果您的设备供应商坚持认为您必须一直运行无用的服务,那么请对您的设备进行root操作。

(2)换出小内存页将如何损害闪存的使用寿命?闪存(或SD卡?)是否自动进行损耗均衡?

即使SD卡确实进行了损耗均衡,更换也会对您造成很大的伤害。

(3)交换会在运行多个应用程序时真正提高性能吗?我假设如果(1)的答案是肯定的,那就可以。

不在Android环境中。与传统的OS会按照您的要求不断尝试切换进程不同,Android会强制杀死旧的未使用进程并回收其内存;这种杀戮速度很快,因为当您执行任务切换时,应用程序将已经保存其状态。

(4)交换时写入闪存会不会太慢,从而损害响应能力?

可能吧,也许不是。为此需要基准。

(5)Android是否保持Linux内核的交换机制是否正确,因此只要存在交换分区/文件,它就会进行交换而无需额外配置?

我不知道Android是否保留交换机制,但是即使这样做(或者如果编译自己的内核),您仍然需要一些配置。通常只有一个fstab指向交换文件的文件并在执行swapon -a

实际上,我有理由说明交换实际上可能会损害性能:它阻止了Android的内存管理方案Application Life Cycle正常工作。


感谢您的回答。我仍然有问题。在Samsung Fascinate上,10个不可杀灭的服务占用约110M内存。还有22个其他可终止服务正在运行,但“正在运行的应用程序”显示没有应用程序在运行。这是我朋友的电话,我之前不知道她到底做了什么,但似乎很可能同时运行许多服务/应用程序。我认为所有这些后台服务/应用程序启动时都不会使用它们所需的所有页面。此外,保存应用程序状态+重新加载并重新启动应用程序+恢复状态也会很慢。
常绿

考虑这个问题的另一种方法是:假设闪存寿命不是问题,Android是否应该进行交换?如果不是,那么Android应用程序和台式机应用程序之间的主要区别是什么?我认为Android生命周期不适用于桌面/服务器应用程序。
常绿

@evergreen:当应用程序进入后台时(例如,当用户按下主菜单切换任务时),将保存应用程序状态。稍后,当某些其他应用程序需要内存时,较旧的应用程序或后台服务将被强制终止(FK实际上不需要时间)。这意味着任务杀死是立即的,因为应用程序状态已经保存很长时间了。重新加载已经在内存中的应用程序时,将获得最快的重新加载时间;但如果应用程序已经卸载,则应用程序需要进行完全重新加载(与交换情况相同)
Lie Ryan 2010年

@evergreen:如果您使用任务杀手,则将强制应用程序卸载,并且始终必须执行完全重载,而不是在应用程序保留在内存中时进行快速重载。如果您使用交换文件/分区,则(较旧的)应用程序将被替换掉,还原所需的工作量几乎与完全重载相同。除外:通过完全重载,应用程序开发人员已将持久性数据与临时数据分开,并且可以优化保存内容和不改进存储内容。在恢复交换时,您不让应用程序开发人员发言,而是将所有内容交换出去。
Lie Ryan

@evergreen:即使假设闪存寿命不是问题,Android也不应进行交换,因为应用程序生命周期可以做得更好。Android Life Cycle专为内存受限的环境而设计,在台式机和服务器环境中,您拥有巨大的内存量,并且用户执行更多的多任务处理,并且他们不希望后台程序被操作系统杀死。Android生命周期的弱点在于它需要应用程序支持。应用程序必须随时准备被杀死,并且必须在预定义的点保存状态。对于桌面应用程序而言,这种复杂性是多余的。
Lie Ryan

5

尽管互联网上其他所有人都会告诉您,但是交换绝对有好处。试试看,自己看看。根据经验,在G1或其他内存不足的手机上,交换可使手机运行得更好,更快。

是的,Android内置了生命周期“任务管理”功能,但不是很好。它通常会在内存不足时杀死进程,并且应用程序应使用“ 捆绑包 ” 保存其状态,以便在您重新启动它们时,它们以与上次进入时相同的状态重新启动。

Android确定需要删除某个进程后,便会残酷地执行此操作,只需强制杀死它即可。然后,内核可以立即回收该进程所需的所有资源,而不必依赖该应用程序的编写正确并响应有礼貌的退出请求。允许内核立即回收应用程序资源可以轻松避免严重的内存不足情况。

如果它确实起作用,那将是很好,并且比不加选择的交换要好。但是这些应用程序并不能真正保存其状态。他们只保存最少量的信息即可返回到该状态。(而且某些应用程序甚至都不需要这样做。)回到该状态需要花费时间。由于交换实际上可以保存应用程序的整个状态,而该状态仅需要重新加载,因此可以使应用程序之间的切换更快。

例如,如果您从浏览器切换到另一个应用程序,浏览器几乎总是被杀死,那么当您切换回它时,它必须从Internet重新加载整个页面。这比从交换状态重新加载状态要花费更多的时间,如果您正在执行数据计划,那会浪费您的钱,并且在网页动态时会导致状态问题。

许多应用程序的启动时间比原先所需的时间长得多,或者在重新启动时实际上并没有返回到相同的状态,因此换出它们的效果更好。

我猜想那些对股票系统感到满意的人会不同地使用他们的手机。

我应该对Cyanogenmod使用交换分区吗?


如果将其留给生命周期,则将由应用程序决定是否缓存额外的数据以提高性能(例如,加载的网页)。如果使用交换,这是操作系统的决定,但是操作系统无法确定要保存什么和不保存什么以最佳地优化性能,因此它必须保存和还原所有内容。如果切换任务,浏览器不会从Internet重新下载页面,我经常打开浏览器,切换到一堆繁琐的游戏和其他活动,然后返回到浏览器,最后一页显示所有内容。
Lie Ryan

对。两种系统都不是最佳选择,但对于大多数应用程序而言,交换效果更好。如果在重新打开页面之前将其杀死,浏览器只会重新加载该页面。在内存不足的手机上,它几乎总是被杀死。
endolith

@LieRyan-“返回到我的最后一页的浏览器,所有内容均立即加载到位”,浏览器重新加载后是否在打开的页面上恢复滚动位置?那是Chrome不能做的事情(尽管我非常喜欢这个浏览器),当您停止在某个相当登录的网页中间阅读,然后再切换到接听电话之前,这是非常不幸的……
kerim

2

我有一个Spice mi-435(仅在印度出售),其RAM只有340M。地狱,交换文件有很大帮助。我的手机在如此低的RAM上运行ICS,并且肯定进入了很多内存不足状态,并且交换文件对您有很大帮助。在不活跃使用时,所有应用程序状态都将转换为交换。这给我的电话空间留出了更多的应用程序,而RAM耗尽的应用程序则可以平稳运行,并且滞后时间大大少于以前。虽然打开我以前使用过的应用程序时出现问题。由于SD比板上的高速RAM慢得多,因此需要花费一些时间来加载其状态。但是,交换选项对于较少的RAM更好。我建议为小于512M的RAM交换分区,但不要为大于512M的RAM交换分区。

希望对您有所帮助。


1

交换文件甚至在具有更高RAM的系统上也有帮助。我的四核1gb ram 7英寸平板电脑通过在uhs-1微型SD卡上进行2gb交换而获得了重要的多任务处理能力。当然,存储器的价格会迅速下降,即使在持续写入的情况下,nand闪存也应持续数年。

我基本上是这样认为的,因为性能差异如此之大,以至于RAM数量少于真正的任何人都应该这样做。实际上,它可能应该作为android中的标准选项(以及更大的应用程序缓存和适当大小的Internet缓存)。

我的意思是您有64-128gb的micro sd(uhs-1),甚至今年推出的uhs-2,还有16-64gb的内部nand,通常是“快速” nand,这是一种原始的ssd或甚至Windows平板电脑上使用的SSD都无法完全满足所有高速空间的需求。速度只有在视频中才能真正发挥出来,或者将应用程序加载到内存中-这正是此处的用途。

当然,理想情况下,制造商将更多的精力放在RAM上,而不是分辨率或额外的内核上,因为显然RAM越高,系统速度将受益匪浅-他们可能还应该提高内部存储的速度(例如切换到完整的ssd类型的系统) ,或至少“快速” nand,但与此同时,高分辨率往往会在所有设备中造成某种RAM不足,但需要一个交换文件以及高速缓存到相当快的外部sd才有意义。

确实,很高兴看到一些浏览器也保持更完整的缓存,大多数浏览器要么速度慢,要么功能低下,很少具有快速和全功能-那部分是因为内部驱动器上用于应用程序缓存的空间很小。它们旨在在低内存和存储环境中运行,并且整个情况正在发生变化。即使ram不能满足其应有的要求,存储肯定也可以,而且按照UHS-1标准(或今年发布的uhs-2),它的存储速度相当快,即使它不是“快速”或ssd。

甚至对于更高容量的uhs-1,外部存储器的成本确实是花生。至少64gb的uhs-1是完全负担得起的(我在这里要花50美元,但是会少一些美元),比该设备便宜得多,而32 gb以下的硬盘基本上是几张纸。

实际上,从台式机上可以学到很多教训,尤其是现在规格越来越高-性能最低的链接是从存储加载到内存。您可以做的越多,越好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.