核心要点
- 内存泄漏发生在应用程序无法归还已分配的内存时,这将逐渐消耗更多内存,并可能导致系统崩溃。
- 通过监控系统的内存(RAM)使用情况,并找出那些稳定消耗过多内存的应用程序或进程,可以检测到内存泄漏。
- 保持操作系统以及所使用的应用程序和程序的更新,是修复和预防内存泄漏错误的最佳方法之一。
无论您的计算机多么快速、先进或新颖,像内存泄漏这样的问题仍然有可能影响到您。
但究竟什么是内存泄漏?它是如何发生的呢?
什么是内存泄漏?
计算机内存,也称为随机存取存储器(RAM),用于临时存储与计算机上正在运行的操作系统、程序和服务相关的信息。之所以使用RAM,是因为它速度很快(甚至比固态硬盘SSD还要快),并且对于存储经常访问的数据非常有用。
应用程序会根据需要使用内存,用于存储与操作、后续步骤以及频繁请求的数据等相关的信息。当应用程序不再需要使用已分配的内存时,就意味着这些内存现在处于空闲状态。但是,如果程序继续运行,而没有归还已经分配的内存,它就会逐渐消耗越来越多的可用内存,并且不释放任何内存,最终导致系统崩溃。
如何检测内存泄漏
当系统内存不足时,您很可能会收到一条屏幕警告消息,提示“您的计算机内存不足”。所有主流操作系统都会显示类似的消息。一旦您看到这条消息,可能会注意到性能下降,并且系统开始出现故障。
检查内存泄漏最简单的方法是观察系统的内存(RAM)使用情况。如果您发现某个应用程序或进程稳定地消耗越来越多的内存,这很可能表明存在问题,即内存泄漏。例如,在下面的示例中,Google Chrome浏览器占用了大量内存,但我同时打开了5个Chrome浏览器窗口,其中包含了大约20个标签页,并且我的电脑安装了32GB的内存。所以,虽然这个数字很高,但实际上并不是问题。现在,如果我查看进程列表,发现Spotify使用了类似的内存量,那么这表明存在问题,可能存在内存泄漏。
如何在Windows上检查内存使用情况
- 右键单击任务栏,然后选择“任务管理器”。
- 在“进程”选项卡上,按照“内存”列排序,将占用内存最大的程序排在最前面。
- 评估排在最顶端的应用程序,看它们是否占用了合理的内存量。
要关闭进程,请右键单击它,然后选择“结束任务”。
如何在macOS上检查内存使用情况
- 前往“应用程序”>“实用工具”,然后打开“活动监视器”。
- 在“活动监视器”窗口顶部,选择“内存”选项卡。
- 按照“内存”列排序,将占用内存最大的程序排在最前面。
- 选择要结束的应用程序或进程,然后单击“停止”按钮。
macOS 提供了两个选项:“退出”或“强制退出”。“强制退出”将立即尝试终止该进程,并删除任何未保存的数据。
如何使用系统监视器在Linux上检查内存使用情况
由于每个Linux桌面环境都有不同版本的系统监视器,因此您需要遵循的步骤可能会有所不同。 通常,您可以在开始菜单或等效的系统搜索工具中输入“系统监视器”,然后选择最匹配的结果。
当系统监视器打开后,按照“内存”选项卡或列进行排序,将占用内存最大的程序排在最前面,并确定是否有任何应用程序或进程正在使用过多的内存。此外,还可以使用 Linux 命令来检查系统健康状况,这些命令可以显示内存的使用情况。
内存泄漏的后果
内存泄漏造成的后果和问题取决于客户端或服务器应用程序的使用。
客户端应用程序(桌面电脑和移动电话)
对于这些设备而言,内存泄漏的后果通常不是特别严重,因为已分配的内存在应用程序终止时会被释放。因此,通常不会出现系统不稳定的情况。但过度使用内存可能会导致一些问题,例如:
- 系统可能开始变得缓慢。
- 计算机上的应用程序可能会突然关闭。
- 分配内存的计算机应用程序代码可能会崩溃,导致错误。
但在更严重的情况下,内存泄漏可能会为代码注入攻击创造机会,从而导致数据丢失和其他安全问题。
服务器应用程序
在这种情况下,内存泄漏的问题会更加严重,因为服务器通常会运行很长时间而不会重新启动。这里的问题与桌面应用程序的问题类似,内存会在几天、几周甚至几个月内被逐渐消耗,并且服务器性能会下降。错误开始出现,最终导致服务器停止工作。
与客户端应用程序类似,长期存在的内存泄漏可能会给攻击者提供利用代码注入攻击的机会,从而危及数据。
如何预防内存泄漏
在编程方面,大多数编程语言都具有帮助开发人员进行自动内存管理的功能,例如垃圾回收器,它可以帮助释放未使用的内存。垃圾回收器有多种类型,了解应用程序的垃圾回收器是如何运作的,对于预防内存泄漏至关重要。
另一种防止内存泄漏的方法是编写能够处理不再需要的资源的代码。您必须编写特定的代码,指示应用程序某个资源的工作已经完成,并且不再需要使用内存。确保循环完整执行,以避免发生内存泄漏。
但是,如果您不是在编程,只是在家用电脑上遇到了内存泄漏问题,那么重新启动系统可以修复内存泄漏,并且如果这是一个临时错误,它可能会阻止问题再次发生。您还应该及时更新您正在使用的操作系统,无论是 Windows、macOS 还是 Linux。通过错误代码或其他错误引入的内存泄漏可以通过更新来修复,无论是操作系统还是相关程序。保持您的机器处于最新状态总是很重要的!
之前,我们已经详细介绍了如何发现和修复 Windows、macOS 和 Linux 上的内存泄漏。但是,您还可以尝试其他一些方法来修复 Windows 上的内存泄漏。
Windows 资源监视器
Windows 资源监视器还可以通过提供系统资源的实时数据来帮助您了解内存泄漏的问题。
NAR 作者:加文
- 在开始菜单搜索栏中输入“资源监视器”,然后选择最匹配的结果。
- 选择“内存”选项卡。
- 按照“提交”选项卡排序,显示最大值。
与之前一样,您必须找出是否有任何应用程序正在使用过多的内存。
如何禁用启动时运行的程序
有时,启动时运行的程序可能会导致内存泄漏。要解决此问题,可以禁用该应用程序,以确保它在启动系统时不会再造成问题。
- 按 Ctrl + Shift + Esc 键打开任务管理器,然后打开“启动”选项卡。
- 找到您想要停止在启动时启动的程序。
- 右键单击,然后选择“禁用”。
请注意,虽然这可以阻止任何与启动相关的内存泄漏问题,但如果您稍后打开该程序,内存泄漏问题仍然可能存在。如果是这种情况,我们建议卸载该程序。
减少内存泄漏,帮助您的计算机更好地运行
内存泄漏可能会令人沮丧,并会严重降低计算机速度,最终可能导致计算机崩溃。它们的影响范围从令人沮丧到危险,并会导致严重的系统稳定性问题。
请记住,解决内存泄漏问题的最佳方法之一是更新您的系统和您正在使用的应用程序,因为内存泄漏可能源于某些错误。