【问题标题】:Is free memory consuming less power on android devices?安卓设备上的空闲内存消耗更少的电量吗?
【发布时间】:2014-11-04 17:42:41
【问题描述】:

例如,我们有两个相同的 android 设备,每个设备都有 2GB RAM(依赖于能量的内存)。

设备 1:1GB RAM 正忙于运行应用程序,1GB RAM 空闲。

设备 2:2GB RAM 正忙于运行应用程序。

想象一下,正在运行的应用程序不使用 CPU,或者只使用了一点点 CPU。内存也保持不变(不经常重写)。设备 2 断电(电池电量为 0%)会比设备 1 快得多吗?

请给我解释一下这个问题,我真的很好奇java-android的内存功耗。

【问题讨论】:

  • 你有没有想过垃圾收集器必须运行这么多次?
  • 让我们忘记垃圾收集器,这不是我好奇的事情:D
  • 如果你好奇也没关系......这是一个后台进程,如果它非常频繁地运行它会耗尽你的电池......

标签: java android memory ram battery


【解决方案1】:

根据Wikipedia,(S)DRAM 的功耗取决于时钟速度,以及内存是处于使用还是空闲状态。这并不意味着作为开发人员您需要关心它,因为其他因素对能耗的影响远大于内存使用量。

【讨论】:

    【解决方案2】:

    嗯,这个概念很简单。

    无论设备是什么(手机、笔记本电脑)和平台是什么(android、windows、ios),软件/应用程序都不会耗尽电池电量。它的 cpu 和 gpu 会耗尽电池。

    因此,运行的应用程序越多,cpu 和 gpu 的使用率就会越高,因此会消耗更多的电池。

    【讨论】:

      【解决方案3】:

      简单的答案是:不。

      让我们遍历选项如何减少内存可能会降低功耗:

      最现实的情况是,拥有更多可用内存意味着更多磁盘/闪存卡缓存命中,从而减少对这些耗电设备的访问。更多的内存也意味着更少的运行 GC 的动力,这可以节省你的 CPU 时间(如果你的系统使用交换/zram,可能会花费更多,大多数手机没有交换)。您可能会在这里节省一些电量。

      另一种选择是手机有更多的内存芯片,内核足够智能,可以压缩内存并使未使用的芯片闲置。技术就在这里,用于热交换服务器中的 RAM,但我还没有听说过手机使用它。

      最后,您可能会确信,在内存中保持零的成本可能会低于保持随机数据的成本(RAM 必须定期刷新其内容)。让我们在 3GB RAM 的笔记本电脑上做一些疯狂的测试。免费给我们:

      缓存的已用空闲共享缓冲区总数 电话:3077800 2760220 317580 40308 219036 1137020 -/+ 缓冲区/缓存:1404164 1673636 交换:2047996 7492 2040504

      计算 /dev/kmem 中全为零的页数得出:Zeroed = 34,used = 786398。让我们尝试删除缓存:

      同步 && 回声 3 > /proc/sys/vm/drop_caches && 免费 缓存的已用空闲共享缓冲区总数 电话:3077800 1686792 1391008 44884 1248 326864 -/+ 缓冲区/缓存:1358680 1719120 交换:2047996 7492 2040504

      结果保持不变:清零 = 34,已使用 = 786398。Linux 不会将可用内存清零,在现代内核上可能不会有很多充满零的页面,因为它们都映射到相同的物理记忆。该机制称为零页(http://lwn.net/Articles/340370/

      【讨论】:

      • 感谢您的详细解释!
      猜你喜欢
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      • 2012-09-16
      • 1970-01-01
      • 2011-09-05
      相关资源
      最近更新 更多