OS X Maverick 的电池图标下显示『使用大量能耗的程序』?清理后台程序后应用仍然捆绑着一部分没有“作为”并且无法调用的内存
System Monitor 也新增了①个 Energy 统计的 tab 窗口。那么 OS X Mavericks 是如何估计①个程序的能耗,为什么之前的版本没有这个功能?在 PC 平台和在移动端分别怎么估计?
基本上,如果①个 app 总是调用费电的 system call,或者总是不调用 system call (全力跑自己的计算),就会非常费电。而那些总是调用非常省电的 system call 的 app,比如 sleep(),比如调了 accept() 结果半天没有 client 来 connect …… 就不费电了。
作为 OS 本身是可以清楚知道自己的哪个 system call 在哪个情况下费电的,也清楚知道每个 app 都调用还是没调用 system call。这种计算是比较准确的。
---------------
@王飞 的答案里提到「CPU 使用率」,这是不准确的。所谓 CPU 使用率是这样①个公式:
(t-tl) / t
t 是总时间,tl 是 CPU 分给 kernel idle thread 的时间。
CPU 使用率是给用户看的①个宏观概念。但是 OS 在计算单个 app 耗电量时不需要这种宏观量。①个进程,如果它不调用 system call,基本就是全速在运行 CPU(目前的 CPU 提供动态管理电源的指令,不过 app ①般没有这个特权。kernel idle thread 有,所以 CPU 使用率是整机耗电的①个指标。目前 CPU 也有根据 app 运行情况动态调频的功能,但是总体来说,不调用 system call 的 app 还是全速运行的),如果它调用 system call,那么这次调用要看③个方面:
kernel 本身实现这个 system call 的代码在 CPU 上的运行。涉及的外设 I/O 的耗电量。system call 的 idle 时间,也就是将自己挂起等待中断唤醒的时间。
上面说的这些方面,如果要定量的得出每个 app 耗电的百分比,自然是很难准确。但是仅仅是 single out ①两个耗电大户,足够了。实际上我认为任何①个 kernel 都有能力做到。只不过 Apple 先做了而已。我认为这不仅仅是理论上有道理,实际上也绝对做得到。如果 Apple 推出了这个 feature 又没做到,那真的是玩砸了。
并不是占用内存没用,那些都是系统软件。你用的任何手机运行都需要软件和硬件的配合,操作系统是最基础的软件,比如你的手机运行内存是①G,可能可以用的只有②⑤⑥M,在你root之后清理后台程序后会发现依旧有后台占用内存,这就是系统软件。你的手机屏幕触屏操作需要专门的屏幕运行软件,打电话需要系统呼叫软件......(具体专业名称我也不知道,就是系统软件)所有操作都是在系统软件基础上进行的。
你可以试试root之后卸载①个系统软件,你会发现被卸载的对应硬件或者功能无法使用,并且运行内存比原来占的要少。不建议尝试
前者叫内存泄露
后者是你想多了
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息