三星i8258吧 关注:71贴子:2,933
  • 11回复贴,共1

【科普】RAM

只看楼主收藏回复

   Android 是如何管理进程的
在Android里,进程和程序是两回事,程序可以一直保留在系统里,但是没有任何进程在 后台“运行”,也不消耗任何系统资源。所有的程序保留在内存中,所有可以更快的启动回到它 之前的状态。当你的内存用完了,系统会自动帮你杀掉你不用的任务。 需要明白的是,Android用RAM的方式,跟windows啥的是两回事。在Android的世界里 面,RAM被用满了是件'好'事。它意味着你可以快速打开之前打开的软件,回到之前的位置。 所以Android很有效的使用RAM,很多用户看到他们的RAM满了,就认为拖慢了他们的电 话。而实际上,是你的CPU——当你的软件真正运行时用到的东东——才是拖慢手机的瓶颈。
为啥说进程管理软件是祸害
很流行的各种进程管理软件都说帮你释放内存是件好事,但这是不正确的。打开这些软件 时,他们告诉你“运行”的软件和杀死他们的方法。你也可以在“服务”里面看到到底程序的哪些 部分在“运行”,占用了多少内存,剩余多少内存。所有的这些都告诉你,杀掉这些程序能够释 放内存。但是这些软件都没有告诉你这些程序到底消耗了多少CPU时钟,而仅仅告诉你能释放 多少内存。要知道,用满了内存实际上是件好事,我们要注意的是CPU,真正消耗你的手机资 源,消耗电池的东东。 因此,杀掉程序通常是没有必要的(尤其是用"autokill"方式杀掉程序)。更严重的是, 这样做会更快的拖垮你的手机能力和电池性能。不管是手动杀掉进程,还是自动的杀掉进程, 重新打开程序,你实际上是在用CPU资源来做这件事。 事实上,这些进程管理软件消耗了系统资源。而且,这些软件会莫名其妙的杀死其他程序 造成乱七八糟的结果(尤其对些小白来说)。所有的这些,告诉我们,你的手机在用它自己的 方式工作,特别是你只是个小白用户,用这些进程管理软件耽误的事情比得到的要多。
那么你应该怎么做呢
这么说吧,各种程序开发水平是不一样的。很多人以前或者现在使用这些进程管理软件, 释放内存,感觉手机快了那么一点。造成这个问题的原因是,你用的软件本身程序写得太烂 了,比如,有得程序完全没有必要联网时,还在联着。这个时候,杀掉这些程序,你能得到好 处,就是说,只有你知道你在干什么得时候,杀掉让你爱但是很烂的程序才能帮上你。 事实上 ,很多开发者,包括ROM开发者,如果用了进程管理程序,当你提交bug报告 时,看都不会看一眼(Cyanogen 时这么干的,我不知道MIUI是不是),所以能不用就不要 用了,除非你真的知道你在干什么。 如果你真关系你的手机的表现和进程,还是多关注下系统进程,看看里面说各种程序都消 耗了多少资源,如果某个程序消耗太多,时不时杀掉它可能会有那么一点帮助。 总的来说,进程管理软件正确的用途是杀那些出错的程序、会导致死机有BUG的进程以及 疑似病毒进程等,而不是一味地追求内存空得多程序在内存里放着,CPU不调用,它就是死 的,一般程序你退出了它就不再运行了,不占用CPU资源(占用了CPU时间这个才是要耗电 的),这就是2.2以上版本系统那个“快速启动”的工作原理。


IP属地:湖北来自Android客户端1楼2014-08-07 16:19回复
     首先要知道Android系统是基于Linux 2.6内核开发的开源操作系统(linux是啥都不知道自己去百度吧),而linux系统的内存管理有其独特的动态存储管理机制。不过Android系统对Linux的内存管理机制进行了优化,Linux系统会在进程活动停止后就结束该进程,而Android把这些进程都保留在内存中,直到系统需要更多内存为止。这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度。
      如果你懂java,就会更容易理解Android系统的内存管理机制。与java的垃圾回收机制类似,系统有一个规则来回收内存。进行内存调度有个阈值,只有低于这个值系统才会按一个列表来关闭用户不需要的东西。Android系统有六类进程:前台进程、可见进程、次要服务、后台进程、内容供应节点、空进程。对于高手而言可以用MinFreeManager之类的软件进行进程管理,分别为六类进程设定不同的阈值来操纵系统的内存分配机制。不过对于一般用户而言,Android系统默认的分配机制已经可以满足使用需要,因此也不需要再去调整。
      安卓的内存管理机制:
      1.系统会对进程的重要性进行评估,并将重要性以“oom_adj”这个数值表示出来,
      赋予各个进程;(系统会根据“oom_adj”来判断需要结束哪些进程,一般来说,“oom_adj”的值越大,该进程被系统选中终止的可能就越高)
      2.前台程序的“oom_adj”值为0,这意味着它不会被系统终止,
      一旦它不可访问后,会获得个更高的“oom_adj”,我们推测“oom_adj”的值是根据软件在LRU列表中的位置所决定的;
      3.Android不同于Linux,有一套自己独特的进程管理模块,这个模块有更强的可定制性,
      可根据“oom_adj”值的范围来决定进程管理策略,比如可以设定“当内存小于X时,结束“oom_adj”大于Y的进程”。这给了进程管理脚本的编写以更多的选择。


    IP属地:湖北来自Android客户端2楼2014-08-07 16:20
    回复
        Android将进程分为六大类:
        1.前台进程(foreground):目前正在屏幕上显示的进程和一些系统进程。
        举例来说,Dialer Storage,Google Search等系统进程就是前台进程;
        再举例来说,当你运行一个程序,如浏览器,当浏览器界面在前台显示时,浏览器属于前台进程(foreground)
        但一旦你按home回到主界面,浏览器就变成了后台程序(background)。我们最不希望终止的进程就是前台进程。
        2.可见进程(visible):可见进程是一些不再前台,但用户依然可见的进程,
        举个例来说:widget、输入法等,都属于visible。
        这部分进程虽然不在前台,但与我们的使用也密切相关,
        我们也不希望它们被终止(你肯定不希望时钟、天气,新闻等widget被终止,那它们将无法同步,你也不希望输入法被终止,否则你每次输入时都需要重新启动输入法)
        3.次要服务(secondary server):目前正在运行的一些服务(主要服务,如拨号等,是不可能被进程管理终止的,故这里只谈次要服务),
        举例来说:谷歌企业套件,Gmail内部存储,联系人内部存储等。
        这部分服务虽然属于次要服务,但很一些系统功能依然息息相关,我们时常需要用到它们,所以也太希望他们被终止
        4.后台进程(hidden):虽然作者用了hidden这个词,但实际即是后台进程(background)
        就是我们通常意义上理解的启动后被切换到后台的进程,如浏览器,阅读器等。
        当程序显示在屏幕上时,他所运行的进程即为前台进程(foreground),
        一旦我们按home返回主界面(注意是按home,不是按back),程序就驻留在后台,成为后台进程(background)。
        后台进程的管理策略有多种:有较为积极的方式,一旦程序到达后台立即终止,这种方式会提高程序的运行速度,但无法加速程序的再次启动;
        也有较消极的方式,尽可能多的保留后台程序,虽然可能会影响到单个程序的运行速度,但在再次启动已启动的程序时,速度会有所提升。
        这里就需要用户根据自己的使用习惯找到一个平衡点


      IP属地:湖北来自Android客户端3楼2014-08-07 16:21
      回复
        普及知识:
          多工系统,Multi-task System
          这个字眼其实是针对使用者和程式开发者多于系统本身,因为这世上没有一个系统不是多工的。
          那么,为什么又会有这个术语?
          原因很简单,因为其实多工指的并非系统本身,而是操作环境。
          多工和非多工的操作环境有何分别?
          系统在执行一个程序时,会有以下几个步骤:
          1. 把主程式放到 RAM 中
          2. 在 RAM 中执行程序
          3. 依照程序的需要,把 RAM 分给该程序使用
          在执行程序时,多工和非多工操作环境是没有分别的,而分别在程序结束时。
          多工操作环境:
          1. 把分给该程序使用的 RAM 回收
          2. 如程序本身没有设定自行关闭的话,会把主程式留在 RAM 中
          3. 如该程序没有工作的话,就会在背景待命,否则就是背景执行。
          非多工操作环境:
          1. 强制关闭该程序
          2. 把分给该程序使用的 RAM 回收
          3. 把主程式从 RAM 中移除,取回记忆体
          说到这里,多工与非多工的分别大家就会很清楚了。
          这是非多工环境的 Iphone、Featured Phone 和多工环境的 Windows Mobile(WM)、Symbian、Android 最大的分别。
          Iphone 永远有足够的 RAM 去给系统运作,所以永保系统运作的顺畅度。
          而 WM、Symbian、Android 这类多工系统,在执行一定数量的程序后,系统便会变钝。


        IP属地:湖北来自Android客户端6楼2014-08-07 16:23
        回复
          没人插


          IP属地:湖北来自Android客户端7楼2014-08-07 16:23
          回复
            水逼


            IP属地:韩国来自Android客户端8楼2014-08-07 17:42
            收起回复
              楼主好知识


              IP属地:广东来自Android客户端9楼2014-08-22 18:12
              收起回复


                IP属地:天津10楼2015-01-05 21:28
                回复
                  顶顶顶


                  IP属地:广东来自Android客户端11楼2015-11-21 20:56
                  回复