例如,我们有两个相同的Android设备,每个设备有2GB RAM(与能量有关的内存)。
设备1:运行应用程序时1GB RAM正忙,1GB RAM空闲。
设备2:运行应用程序时,2GB RAM正忙。
想象一下,运行的应用程序不使用CPU,或仅使用一点CPU。内存也保持不变(不经常重写)。设备2是否会比设备1快失去电量(电池电量为0%)?
请向我解释这个问题,我对java-android内存耗电量非常好奇。
答案 0 :(得分:3)
根据Wikipedia,(S)DRAM的功耗取决于时钟速度,以及存储器是在使用还是闲置。这并不意味着你需要关注它作为开发人员,因为其他因素会比内存使用更多地影响能耗。
答案 1 :(得分:1)
嗯,这个概念很简单。
无论设备(手机,笔记本电脑)和平台(android,windows,ios)是什么,软件/应用程序都不会耗尽电池电量。它的cpu和gpu会耗尽电池。
运行的应用程序越多,cpu和gpu的使用就越多,因此会耗尽更多的电池。
答案 2 :(得分:0)
简单的答案是:不。
让我们重复选择如何减少内存可能会降低功耗:
最现实的情况是,拥有更多可用内存意味着更多磁盘/闪存卡缓存命中,从而减少对这些耗电设备的访问。更多内存也意味着运行GC的动力较小,可以节省CPU时间(如果系统使用swap / zram,大多数手机都没有交换,可能会花费更多)。你可能会在这里节省一些力量。
另一种选择是手机拥有更多内存芯片,内核足够智能,可以压缩内存并使未使用的芯片空闲。技术在这里,用于服务器中的RAM热插拔,但我还没有听说过使用它的手机。
最后,您可能会确信在内存中保留零的成本可能会比保留随机数据低得多(RAM必须定期刷新其内容)。让我们在3GB内存的笔记本电脑上做一些疯狂的测试。免费给我们:
total used free shared buffers cached Mem: 3077800 2760220 317580 40308 219036 1137020 -/+ buffers/cache: 1404164 1673636 Swap: 2047996 7492 2040504
在/ dev / kmem中计算满零的页面给我们:Zeroed = 34,used = 786398.让我们尝试删除缓存:
sync && echo 3 > /proc/sys/vm/drop_caches && free total used free shared buffers cached Mem: 3077800 1686792 1391008 44884 1248 326864 -/+ buffers/cache: 1358680 1719120 Swap: 2047996 7492 2040504
结果保持不变:Zeroed = 34,used = 786398.Linux没有将空闲内存归零,而在现代内核上可能没有很多页面充满零,因为它们都映射到相同的物理记忆。机械主义称为零页(http://lwn.net/Articles/340370/)