分享一个win上好用的内存清理工具

由于本人在使用IDEA的时候发现,在进行应用编码运行打包的时候时常会出现内存占用超过IDEA本身的使用,这个非常的不合理,因此苦苦寻觅发现RAMMap可以完美解决这个问题
RAMMap的清理量是非常夸张。本人设备64G内存在百分之70占用时,几乎每次都可以清理10G甚至30G的占用
软件版本: RAMMap v1.61

:hammer_and_wrench:

  • 佬友们可以通过官方链接获得这个应用
  • 在标题栏可以找到Empty即可清理,下放是一些功能介绍
    • Empty Working Sets清理工作页
    • Empty System Working Set清理系统工作页
    • Empty Modified Page List清理修改页
    • Empty Standby List清理备用页
    • Empty Priority 0 Standby List清理优先级为0的备用页

:tanabata_tree:

但直接使用软件并不方便,一般只有在发现设备无法正常响应操作的时候才会关注一次内存占用情况
因此我发现可以使用命令行执行操作内存清理
使用案例:RAMMap.exe -ew

  • 在标题栏可以找到HelpUsage即可查看命令,下放是一些功能介绍
    • -Ew Empty Working Sets清理工作页
    • -Es Empty System Working Sets清理系统工作页
    • -Em Empty Modifed Page List清理修改页
    • -Et Empty Standby List清理备用页
    • -E0 Empty Priority 0 standby List清理优先级为0的备用页

:open_book:

由于RAMMap命令拆分过多,逐个执行非常的繁琐
因此捣鼓了一个脚本来简化这个操作
脚本编码:GBK

RAMMap.bat

@echo off
rem 强制使用GBK编码,避免win脚本运行问题
chcp 936 >nul
setlocal enabledelayedexpansion

rem 定义RAMMAP路径
set RAMMAP_PATH="RAMMap.exe"

rem 入口
goto :Menu

:Menu
echo 正在启动RAMMap内存清理...
rem 清理工作页
%RAMMAP_PATH% -ew
rem 清理系统工作页
%RAMMAP_PATH% -es
rem 清理修改页(无特殊必要不清理,容易导致应用奔溃)
:: %RAMMAP_PATH% -em
rem 清理工作页后,进行停顿10秒再执行备用页(主要是工作页清理后一段时间内会大量增加备用页占用,需等待备用页增量一定时间后清理,会得到较好的内存释放)
timeout /t 10 /nobreak
rem 清理备用页
goto :EmptyEtandby

rem 清理备用页及清理优先级为0的备用页
:EmptyEtandby 
echo 正在清理备用页...
:: 清理备用页
%RAMMAP_PATH% -et
:: 清理优先级为0的备用页
%RAMMAP_PATH% -e0
rem 清理工作页后,进行停顿

echo RAMMap内存清理已完成

:building_construction:

使用一段时间发现,软件可以用脚本执行合理清理内存,但还是需要手动执行操作非常繁琐,影响优雅的编码过程
因此我在这个脚本之上又捣鼓一个新的脚本,轮询一分钟检查内存占用是否达到阈值,然后套娃操作清理内存
脚本编码:GBK

Poller.bat

@echo off
rem 强制使用GBK编码,避免win脚本运行问题
chcp 936 >nul
setlocal enabledelayedexpansion

rem 设置内存使用阈值(单位为MB)
set threshold=40000
rem 设置检查间隔时间(单位为秒)
set checkInterval=60

rem 定时轮询检查
:loop
rem 递增循环计数器
set /a loopCount+=1
rem 获取空闲内存
for /f "tokens=2 delims==" %%a in ('wmic os get FreePhysicalMemory /value') do (
    if not "%%a"=="" set freeMemoryKB=%%a
)
set /a freeMemory=!freeMemoryKB! / 1024
rem 获取总内存
for /f "tokens=2 delims==" %%a in ('wmic os get TotalVisibleMemorySize /value') do (
    if not "%%a"=="" set totalMemoryKB=%%a
)
set /a totalMemory=!totalMemoryKB! / 1024
rem 计算已使用的内存
set /a usedMemory=!totalMemory! - !freeMemory!
cls
echo 循环次数: !loopCount! 次
echo 总内存: !totalMemory! MB
echo 剩余内存: !freeMemory! MB
echo 已使用: !usedMemory! MB
rem 判断是否清理
if !usedMemory! geq !threshold! (
    rem 替换下面一行为实际的清理命令或脚本
    call RAMMap.bat
)
rem 延迟执行
timeout /t !checkInterval! /nobreak >nul
goto loop
  • 使用可将 RAMMap.exeRAMMap.batPoller.bat放置在同一个目录中
    图片
  • 只执行Poller.bat即可

:tangerine:

可能会有佬友会问我为什么不用任务计划程序,那是因为任务计划程序的触发器只能按天或者按日志。也许也是我不会配置,达不到我想要的效果

佬们如果觉得还阔以,望点点赞哈~
佬们如果还有更好的方案,也可以回复补充一下~

33 个赞

感谢分享~~
图片

2 个赞

感谢分享,回头试试

2 个赞

感谢分享,回头试试

3 个赞

感谢分享

1 个赞

这个不是 IDEA 的锅吧。是打包软件没有限制内存吧。比如 maven 的开启了 JVM ,要对它的 JVM 限制吧。

应该不是,所以没有直接解决IDEA而是另外的方式解决

感谢分享!

点赞了,我已经获得蛐蛐你的权力了 :grimacing:

1 个赞

感谢分享

1 个赞

感谢分享

4 个赞

感谢分享

GBK编码吧,不是GPK

感谢分享,目前在用这个 Mem Reduct (GitHub - henrypp/memreduct: Lightweight real-time memory management application to monitor and clean system memory on your computer.)
image

2 个赞

好的,感谢提醒

感谢。

感谢分享 mark

感谢分享

我也分享一个吧,一直用的这个,挂着后台,无感使用。 H3d9/memory_cleaner: Memory Cleaner重制版(原版未开源),删除强制联网更新,并添加目前windows已有的所有清理内存方法。 (github.com)
image

2 个赞

这个也不错,但好像默认清理只针对工作页,之前有遇到过备用页满导致某些刚好在写内存的应用无法写内存而卡顿或者奔溃。