《Windows 8 权威指南》——2.5 Windows 8 Metro应用内存回收机制

简介:

本节书摘来自异步社区《Windows 8 权威指南》一书中的第2章,第2.5节,作者:胡耀文 , 尹成 , 李贝贝 , 卢磊 , 曹珍著,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.5 Windows 8 Metro应用内存回收机制

Windows 8 权威指南
微软在新一代的Windows 8中引入了全新的Metro界面,在Metro界面中拥有许多应用程序。针对这些应用的功耗问题,微软采取了特别优化策略,即应用被挂起之后,并不会使用CPU,从而使CPU进入低功耗状态,这时暂停的应用则会被保存在内存之中。本节将简要介绍Metro应用的内存回收机制。

首先来看看被保存在内存之中暂停的Metro应用。Metro应用与桌面应用程序不同,不管是否在前台显示,它经常会处于挂起的状态。当Metro应用程序挂起,它就在内存中处于保持的状态。可以打开任务管理器,在资源管理器中查看Metro应用的挂起,如图2.18所示。

screenshot

图2.18中被黑框框起来的为Metro应用程序,可以发现在它们被挂起来之后,CPU的使用率为0,而且它们都只占用了少部分的内存。从中可以看出,若电脑没有内存压力就可以让更多的Metro应用处于挂起状态。

接下来我们来看看Metro应用在暂停的情况下其内存回收机制。从Windows 8的消费者预览版开始,我们就可以将挂起的Metro风格应用程序的整个工作集写入磁盘,以便当系统检测到压力的时候可以获取更多的内存。(这个过程与使特定的应用程序休眠然后再切换回恢复时类似),我们利用Metro风格的应用程序的挂起/回复机制来清空或者重新填充应用程序的工作集。

下面我们详细介绍一下事件发生的顺序。

第一步,进程生命管理器(PLM)检测系统中的内存压力并要求内存管理器(MM)清空承载已挂起的Metro风格应用程序的特定进程工作集,如图2.19所示。

第二步,MM将内存从应用程序工作集转移到操作系统的已修改页面列表(其中列出在重用之前其内容已被写入磁盘的内存),如图2.20所示。

screenshot

第三步,已修改页面列表上的工作集页面将根据常见的策略异步写出(在后台伺机写出,当面临内存压力时触发写出),如图2.21所示。

第四步,即使将挂起应用程序的工作集写入磁盘,从进程中删除的内存页也仍保留在操作系统的备用列表中。这是在必要时可调整用途供其他应用程序使用的有用内存页的缓存。如果原始进程立即再次需要这些页面,则它们会被迅速移回原处,如图2.22所示。

screenshot

如果用户在应用程序的工作集页面仍位于物理内存(位于已修改页面列表或备用列表)中时切换回该应用程序,页面将立即重新添加到应用程序的进程中。如果它们不再可用,Windows将以经过优化的方式从磁盘读入应用程序的工作集。

现在让我们来看看内存回收在实际中的应用。为了亲自体验其工作方式,我们使用运行的实例来演示内存回收的应用。

在RAM为2GB的电脑上运行多个Metro风格应用程序,这些Metro风格应用程序在后台运行,因此Windows将它们挂起。然后,我开始打开更多应用程序,以便推高系统上的内存使用率并触发该新功能。

在图2.23中,您将注意到,我打开了一些应用程序以造成更大内存压力并促使发生前面介绍的行为。显而易见,Windows清空了挂起的Metro风格应用程序的工作集(突出显示)。

screenshot

从图2.23中可以观察到,Metro风格的应用程序的工作集已经清空,此时我们来比较一下原来的Metro风格应用程序“之前”和“之后”的工作集(由于任务管理器空间不足,无法显示全部27个已启动的应用程序,因此看不到有些“之后”的统计数据)统计结果,如表2.1所示。
screenshot

可以看出,在此示例中,我们释放了超过250 MB的物理RAM供其他应用程序使用,而没有关闭挂起的应用程序。

针对此新功能的测试是在挂起的应用程序的工作集内容被清空后,您决定切换回该应用程序时它的响应速度。在运行此测试时,我使用了“Video”应用程序作为响应速度指标。“Video”应用程序既可以显示歌曲的歌词,又可以播放音乐视频。当“Video”应用程序进入后台时,它会挂起,从而停止播放。

将内存使用率推高到工作集被清空的程度后,我打开了更多应用程序并使用了系统一段时间,以确保切换回该应用程序时从磁盘读取工作集。然后,我执行了回到Video应用程序的操作,如图2.24所示。

screenshot

我要查看的主要指标是,从执行回到该应用程序的操作到我能够再次听到声音需要多长时间。在配置低端电脑上,由于内存负载较重,从磁盘读取工作集的应用程序与工作集仍然位于内存中的应用程序相比,切换回它们时的响应速度没有明显区别。但实际效果仍将有所不同:工作集越大,从磁盘读入的时间就越长。

每个拥有释放版本的人都可以亲自尝试此功能。只需打开一些Metro风格应用程序和桌面应用程序以产生一定的内存压力,然后切换回已清空其工作集的已挂起Metro风格应用程序即可。

相关文章
|
4天前
|
Ubuntu Linux C语言
【opencv】opencv在windows和linux的应用
【opencv】opencv在windows和linux的应用
|
20天前
|
消息中间件 程序员 Windows
Windows消息机制《MFC深度详解》
Windows消息机制《MFC深度详解》
17 1
|
23天前
|
开发框架 .NET API
在Windows Server 2008 R2上运行.Net 8应用
在Windows Server 2008 R2上成功运行.Net 8程序,需安装三个补丁:Windows Server 2008 R2 SP1 (KB976932)是基础更新;VC_redist.x64提供MSVC库支持;KB3063858解决.NET运行时加载`kernel.dll`的路径问题。KB3063858可能需要KB2533623。详细信息和下载链接在文中给出。
|
17天前
|
网络安全 Windows
windows Windows Defender彻底删除屏蔽后台启动占用内存 win10防火墙 windows10防火墙
windows Windows Defender彻底删除屏蔽后台启动占用内存 win10防火墙 windows10防火墙
|
23天前
|
Java
DirectMemory内存回收
DirectMemory内存回收
16 0
|
1月前
|
C# Windows
一款.NET开源、简洁易用的Windows桌面小说阅读应用
一款.NET开源、简洁易用的Windows桌面小说阅读应用
|
1月前
|
存储 缓存 NoSQL
Redis 内存回收
Redis 内存回收
24 3
|
1月前
|
算法 安全 Java
内存分配与回收策略
内存分配与回收策略
29 0
内存分配与回收策略
|
1月前
|
Serverless API 数据安全/隐私保护
Serverless 应用引擎产品使用之阿里函数计算中在本地搭建Windows开发环境与阿里云函数计算进行交互如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
1月前
|
NoSQL 应用服务中间件 Linux
Redis的内存回收机制
Redis的内存回收机制
33 2