[特殊字符] 开发工作高内存占用场景下,Windows 内存压缩机制是否应该启用?实测分析与优化建议

在日常开发中,我们往往需要同时运行多个高占用内存的工具,例如:

  • IntelliJ IDEA

  • VMware 虚拟机

  • 多个 Java 后端程序

这些应用程序非常“吃内存”,轻松就能把 16GB、甚至 24GB 的物理内存用满。那么,Windows 的“内存压缩机制”(Memory Compression)是否对我们开发者有帮助?需不需要开启?

本文结合我的开发环境与实测表现,从系统原理和实际体验两方面,为大家分享:


💡 什么是内存压缩(Memory Compression)?

内存压缩是 Windows 10 及以上版本中的一项内存管理优化:

  • 当系统内存使用率较高时,会将不活跃的内存页压缩后保存在物理内存中

  • 这样可以延迟或减少将数据写入磁盘的虚拟内存(pagefile.sys),从而提升性能。

✅ 简单来说:

内存压缩 = 在内存紧张时,优先“挤压”内存数据,而不是马上用磁盘来换出内容。


🖥️ 我的开发环境

在实际工作中,我的日常开发场景如下:

项目情况
IDEIntelliJ IDEA,内存占用约 2~4GB
虚拟机VMware,运行 Linux,分配内存 8~12GB
Java 服务多进程,每个 Java 应用约占用 2~4GB
系统配置Windows 10 + i5-12500H + 24GB DDR4 3200MHz

在这种场景下,系统内存使用率经常超过 90%,是内存压缩的典型触发环境。


🧪 如何查看是否启用了内存压缩?

✅ 方法如下:

  1. 管理员身份 打开 PowerShell。

  2. 执行命令:

    Get-MMAgent
    
  3. 查看输出结果中的:

    MemoryCompression    : True
    
    • True 表示内存压缩已启用。

    • False 表示未启用。


🔧 如何手动启用或关闭内存压缩?

✅ 启用内存压缩(推荐):

Enable-MMAgent -mc

重启电脑后生效。

❌ 禁用内存压缩(不推荐高负载用户):

Disable-MMAgent -mc

关闭后同样需要重启生效。


🧠 启用 vs 禁用内存压缩:对比实测

我对两种状态进行了开发环境下的实测对比:

✅ 启用内存压缩时:

  • 系统即便内存占用超过 90%,也不容易掉入磁盘分页。

  • 虚拟机、IDEA 最小化再恢复时,响应快、不卡顿

  • Java 应用之间切换流畅,系统整体更稳定。

❌ 禁用内存压缩时:

  • 系统频繁访问 pagefile,磁盘 I/O 明显上升

  • 切回最小化的虚拟机或 IDE,加载卡顿明显,有黑屏/延迟问题

  • JVM 服务响应变慢,甚至会因为内存不足被系统回收。


💬 内存压缩机制的 CPU 开销大吗?

Windows 的内存压缩是轻量级的,使用高效的算法在内核层面运行。

以我使用的 i5-12500H(12核16线程) 来说,压缩带来的 CPU 开销可以忽略不计,系统任务管理器几乎看不出明显波动。

相比磁盘读写,CPU 做压缩远远更快、更省时间


🔧 推荐优化建议(高内存开发场景)

项目建议
内存压缩启用 ✅(推荐)
虚拟内存(pagefile)启用并设为“系统管理”或固定为 24GB~32GB
虚拟机内存分配不宜超过物理内存一半,推荐 6~10GB
JVM 堆内存参数合理分配 -Xmx,不宜过大,避免多进程抢占
IDEA 配置建议使用默认或适度增加内存参数(如 -Xmx2048m
多项目调试尽可能使用 Docker、WSL2 替代 VMWare,更节省内存资源

🧩 总结

在像我这样内存使用率接近 90% 的开发场景下:

  • 启用内存压缩 能显著减少卡顿、提升响应速度。

  • 是介于“继续占内存”和“换出到磁盘”之间的一种高性能方案。

  • 不建议关闭,除非你对 CPU 延迟要求极高,或者做实时音频/视频等极限任务。


📌 小提示: 内存压缩 ≠ 替代物理内存,它是当你“物理内存吃紧”时的一个高效“缓冲垫”。


💬 如果你也有类似的开发需求或遇到过系统卡顿的问题,欢迎留言交流!我也可以根据你具体的开发工具帮你制定更细致的内存优化建议。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/903657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式学习笔记 - HAL_xxx_MspInit(xxx);函数

使用cubeMX生成的HAL库函数中,所有外设的初始化函数HAL_xxx_Init(&xxxHandle)中都存在有此调用函数HAL_xxx_MspInit(xxx),此调用函数其实是对各外设模块比如UART,I2C等控制器使用的的底层硬件进行初始化,包括时钟,…

Nginx — http、server、location模块下配置相同策略优先级问题

一、配置优先级简述 在 Nginx 中,http、server、location 模块下配置相同策略时是存在优先级的,一般遵循 “范围越小,优先级越高” 的原则,下面为你详细介绍: 1. 配置继承关系 http 块:作为全局配置块&…

WPF之TextBlock控件详解

文章目录 1. TextBlock控件介绍2. TextBlock的基本用法2.1 基本语法2.2 在代码中创建TextBlock 3. TextBlock的常用属性3.1 文本内容相关属性3.2 字体相关属性3.3 外观相关属性3.4 布局相关属性 4. TextBlock文本格式化4.1 使用Run元素进行内联格式化4.2 其他内联元素 5. 处理长…

华为云loT物联网介绍与使用

🌐 华为云 IoT 物联网平台详解:构建万物互联的智能底座 随着万物互联时代的到来,物联网(IoT)已成为推动数字化转型的关键技术之一。华为云 IoT 平台(IoT Device Access)作为华为云的核心服务之…

AnimateCC教学:形状补间动画的代码实现

核心代码: var shape; var animationProps = {width: 50,height: 50,cornerRadius: 0,color: "#00FF00" }; function init() { shape = new createjs.Shape();shape.x = 200;shape.y = 150;stage.addChild(shape);// 初始绘制updateShape();// 设置补间动画createTw…

Android学习总结之Retrofit篇

1. 注解原理概述 在 Java 里,注解是一种元数据,它为代码提供额外信息但不影响程序的实际逻辑。注解可以在类、方法、字段等元素上使用,并且能在编译时、运行时通过反射机制被读取。Retrofit 充分利用了 Java 注解机制,通过自定义…

windows11 编译 protobuf-3.21.12 c++

下载 protobuf 包,本文使用 3.21.12 版本,Gitub下载链接: Github官网 , 网盘下载: 网盘 如果电脑环境没有安装 cmake 则需要安装,本文测试使用 cmake-3.25.1 版本, 下载地址:[camke-3.25.1] (…

Java继承中super的使用方法

super 关键字在 Java 中用于访问父类的成员(包括字段、方法和构造函数)。当你在子类中调用父类的方法或访问父类的成员变量时,super 是必不可少的工具。 🔑 super 的基本用法 1. 调用父类的构造方法 在子类的构造方法中&#x…

网络安全之浅析Java反序列化题目

前言 这段时间做了几道Java反序列化题目,发现很多题目都是类似的,并且可以通过一些非预期gadget打进去,就打算总结一下常见的题目类型以及各种解法,并提炼出一般性的思维方法。 正文 分析入口点 拿到题目,有附件最…

动态规划问题,下降路径最小和(dp初始化问题,状态压缩),单词拆分(回溯法+剪枝+记忆化),substr函数

下降路径最小和 题目链接: 931. 下降路径最小和 - 力扣(LeetCode) 题目描述: 给你一个 n x n 的 方形 整数数组 matrix ,请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开…

大数据治理自动化与智能化实践指南:架构、工具与实战方案(含代码)

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:从人治到机治,数据治理正在进化 随着数据体量持续膨胀、数据场景复杂化,传统依赖人工规则的大数据治理方式已难以为继。企业在治理过程中面临: 数据质量问题激增,人工检测成本高 元数…

Golang - 实现文件管理服务器

先看效果: 代码如下: package mainimport ("fmt""html/template""log""net/http""os""path/filepath""strings" )// 配置根目录(根据需求修改) //var ba…

Linux-04-用户管理命令

一、useradd添加新用户: 基本语法: useradd 用户名:添加新用户 useradd -g 组名 用户:添加新用户到某个组二、passwd设置用户密码: 基本语法: passwd 用户名:设置用户名密码 三、id查看用户是否存在: 基本语法: id 用户名 四、su切换用户: 基本语法: su 用户名称:切换用…

Ollama 安装 QWen3 及配置外网访问指南

一、Ollama 安装 QWen3 安装步骤 首先尝试运行 QWen3 模型: ollama run qwen3 如果遇到版本不兼容错误(Error 412),表示需要升级 Ollama: curl -fsSL https://ollama.com/install.sh | sh 验证版本: o…

高性能架构设计-数据库(读写分离)

一、高性能数据库简介 1.高性能数据库方式 读写分离:将访问压力分散到集群中的多个节点,没有分散存储压力 分库分表:既可以分散访问压力,又可以分散存储压力 2.为啥不用表分区 如果SQL不走分区键,很容易出现全表锁…

【Hive入门】Hive性能优化:执行计划分析EXPLAIN命令的使用

目录 1 EXPLAIN命令简介 1.1 什么是EXPLAIN命令? 1.2 EXPLAIN命令的语法 2 解读执行计划中的MapReduce阶段 2.1 执行计划的结构 2.2 Hive查询执行流程 2.3 MapReduce阶段的详细解读 3 识别性能瓶颈 3.1 数据倾斜 3.2 Shuffle开销 3.3 性能瓶颈识别与优化 4 总结 在大…

开源模型应用落地-qwen模型小试-Qwen3-8B-快速体验(一)

一、前言 阿里云最新推出的 Qwen3-8B 大语言模型,作为国内首个集成“快思考”与“慢思考”能力的混合推理模型,凭借其 80 亿参数规模及 128K 超长上下文支持,正在重塑 AI 应用边界。该模型既可通过轻量化“快思考”实现低算力秒级响应,也能在复杂任务中激活深度推理模式,以…

Kafka Producer的acks参数对消息可靠性有何影响?

1. acks0 可靠性最低生产者发送消息后不等待任何Broker确认可能丢失消息(Broker处理失败/网络丢失时无法感知)吞吐量最高,适用于允许数据丢失的场景(如日志收集) 2. acks1 (默认值) Leader副本确认模式生产者等待Le…

虚拟机centos7安装docker

虚拟机CentOS 7上安装 Docker流程 1. 更新系统软件包 需要确保系统软件包是最新的 sudo yum -y update sudo:以超级用户权限执行命令。 yum:CentOS的包管理器工具。 -y:自动确认所有提示,直接执行。 2. 安装 Docker 依赖 在安装 …

ZYNQ MPSOC之PL与PS数据交互DMA方式

ZYNQ MPSOC之PL与PS数据交互DMA方式 1 摘要 XILINX ZYNQ 以及 ZYNQ MPSOC主要优势在于异构 ARM+FPGA。其中非常关键的一点使用了 AXI 总线进行高速互联。而且这个 AXI 总线是开放给我们用户使用的。在前面的文章中我们详解了使用了AXI-HP方式PL到PS端进行数据交互。本文主要涉…