《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风格应用程序即可。

相关文章
|
5天前
|
缓存 安全 算法
Java内存模型深度解析与实践应用
本文深入探讨Java内存模型(JMM)的核心原理,揭示其在并发编程中的关键作用。通过分析内存屏障、happens-before原则及线程间的通信机制,阐释了JMM如何确保跨线程操作的有序性和可见性。同时,结合实例代码,展示了在高并发场景下如何有效利用JMM进行优化,避免常见的并发问题,如数据竞争和内存泄漏。文章还讨论了JVM的垃圾回收机制,以及它对应用程序性能的影响,提供了针对性的调优建议。最后,总结了JMM的最佳实践,旨在帮助开发人员构建更高效、稳定的Java应用。
|
10天前
|
存储 缓存 监控
Flink内存管理机制及其参数调优
Flink内存管理机制及其参数调优
|
15天前
|
存储 算法 调度
深入理解操作系统的内存管理机制
【7月更文挑战第12天】本文将深入探讨操作系统中至关重要的内存管理机制。内存是计算机系统中宝贵的资源,其管理效率直接影响系统性能。我们将从内存管理的基本原理出发,逐步解析分页和分段技术、虚拟内存的概念以及内存分配策略等核心内容。通过实例分析,揭示现代操作系统如何优化内存使用,提高系统响应速度及资源利用效率。
|
14天前
|
存储 缓存 算法
操作系统中的内存管理机制探究
【7月更文挑战第13天】本文深入探讨了操作系统中至关重要的内存管理机制,揭示了其对系统性能与稳定性的影响。通过分析现代操作系统中内存管理的基本原理、关键技术以及面临的挑战,文章提供了对内存分配策略、虚拟内存技术和缓存管理等核心概念的深度解析。进一步地,文章讨论了内存泄漏和碎片化问题,提出了相应的解决策略,旨在为读者提供操作系统内存管理的全面视角,并指出未来可能的发展趋势。
|
16天前
|
缓存 监控 关系型数据库
深入理解Linux操作系统的内存管理机制
【7月更文挑战第11天】在数字时代的浪潮中,Linux操作系统凭借其强大的功能和灵活性,成为了服务器、云计算以及嵌入式系统等领域的首选平台。内存管理作为操作系统的核心组成部分,对于系统的性能和稳定性有着至关重要的影响。本文将深入探讨Linux内存管理的基本原理、关键技术以及性能优化策略,旨在为读者提供一个全面而深入的理解视角,帮助开发者和系统管理员更好地优化和管理Linux系统。
|
16天前
|
监控 Java 数据库连接
Java面试题:如何诊断和解决Java应用的内存泄漏问题?
Java面试题:如何诊断和解决Java应用的内存泄漏问题?
19 2
|
2天前
|
存储 缓存 安全
深入理解Java内存模型(JMM)及其在并发编程中的应用
本文旨在探索Java内存模型(JMM)的奥秘,并揭示其在并发编程中的关键作用。我们将通过数据支撑,案例分析,以及对比研究的方法,深入剖析JMM的核心概念、原理和机制。文章将提供丰富的实例,包括同步块、volatile关键字的使用,以及线程间的通信机制,来具体展示JMM如何管理并发环境下的数据一致性和可见性问题。我们还将讨论JMM在现代多核处理器架构下面临的挑战,以及如何在编写高效且线程安全的代码时避免常见的并发陷阱。最后,文章将提出一些最佳实践,帮助开发者充分利用JMM的特性,以提升应用程序的性能和可靠性。
|
8天前
|
存储 安全 Java
深入理解Java内存模型(JMM)及其在并发编程中的应用
Java内存模型(JMM)是Java虚拟机规范中定义的一套规则,它指导着线程如何通过内存交互。JMM不仅关乎数据一致性与可见性问题,还直接影响到并发程序的正确性和性能。本文将探讨JMM的核心概念、工作原理及其在高效并发编程中的实践应用,旨在为读者提供一套完整的理论框架和实战技巧,以应对复杂并发环境下的挑战。
|
12天前
|
存储 缓存 安全
探索现代操作系统的内存管理机制
【7月更文挑战第15天】在数字时代的脉络中,操作系统作为计算机硬件与软件之间的桥梁,承担着至关重要的角色。其中,内存管理是操作系统核心功能之一,它直接关系到系统性能与稳定性。本文将深入探讨现代操作系统中内存管理的基本原理、关键技术以及面临的挑战,旨在为读者提供对内存管理机制深层次的理解,并展望其未来的发展方向。
12 0
|
16天前
|
设计模式 存储 缓存
Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
21 0

相关课程

更多