windows|window虚拟内存
先公布结论
- 当我们在任务管理器看到内存还有剩余,但是程序无法申请报OOM的时候,可能是虚拟内存不够用,占用了物理内存,而这一部分内存在任务管理器中认为是未使用的。可以通过资源管理器 右侧视图的内存使用来判断
- 任务管理器显示的是上面的使用的物理内存,而内存实际使用为下图的内存使用,可以通过systeminfo查看具体使用情况
文章图片
- 物理内存16G,系统的虚拟内存没有设置过 ,经过我的多次对比得到systeminfo中获取到的 虚拟内存最大值=虚拟内存+物理内存
- 系统默认给我开启了10G的虚拟内存,在c盘根目录下
- 该状态在物理内存还剩余 2G ,虚拟内存160M 但是系统已经无法给我新的java虚拟机分配内存了?
-
文章图片
文章图片
- 在资源管理器内存用量仍然剩余3g的情况下,我看到了如上的资源监视器
- 内存空间主要是正在使用的11G资源,以及3G的备用内存
- 可以看到备用的解释为 未活跃使用的缓存数据和代码的内存
- windows内存设计的思想是"没用使用内存都是浪费",所以吧剩余没有利用起来的内存直接用作缓存加速
5. 在新进程启动的过程中会亚索备用区的大小,我目前在该状态下启动xmx=2g的java程序失败,不清楚是否是因为程序实际占用空间大于该备用空间导致。 - 只需要参考内存使用情况是否100% ,如果此时物理内存未满,可以增加虚拟内存大小
- 在上半部分的进程中,根据比对感觉工作集大小应该是物理内存使用情况,已提交内存大小为物理内存+虚拟内存的总大小
- 根据进程id,结合jconsole对比,可以更好地感受实际java程序的内存使用情况
文章图片
- 上述数据均通过systeminfo统计获取,测试方式为分为两次
- 第一次使用虚拟内存配置为10-20G
- 第二次未开启虚拟内存
- 然后逐次启动应用,观察内存占用情况的大小
- 特殊现象
- 第二次测试中,标红色的物理内存异常下降,原因未知
- 第二次测试最后一次测试,剩余虚拟内存空间 300M 此时继续启动程序,会出现内存不足的异常
- 第二次测试中 物理内存大小与虚拟内存大小总量保持一致,但是已用内存不一致
- 第一次测试倒数第二次测试,可用虚拟内存不足的情况下继续开启应用,此时配置的最小虚拟内存大小会扩增
- 结论
- 未开启足够虚拟内存的情况下,资源管理器统计的物理内存不足以实际反映出内部才能占用情况 ,此时参考虚拟内存即可
- 两种情况下,应用占用的总内存基本保持一致(第一种情况为物理+虚拟 第二种情况 只参考虚拟内存)
- 如果虚拟内存已达到上限,物理内存富余,会将虚拟内存数据写到物理内存中去,且资源管理器(只反映物理内存)无法反应这部分虚拟内存,
可以通过资源监视器中的内存使用情况
ps:推测- 如果物理内存先不足可能会爆出内存溢出,也可能将物理内存中的数据写入虚拟内存中去
(问题在于物理内存数据是否可以写入虚拟内存,确认虚拟内存数据可以写入物理内存)
- 如果物理内存先不足可能会爆出内存溢出,也可能将物理内存中的数据写入虚拟内存中去
推荐阅读
- 虚拟DOM-Diff算法详解
- Xshell5|Xshell5 远程连接本地虚拟机Ubuntu16
- Caffe在Windows10下CPU版本的安装(cpu+anaconda3+vs2013+pycaffe)
- 笔记|如何在Windows11安装安卓子系统()
- windows11|Windows11安装Android子系统
- 废材自救记录|虚拟机-无法安装vmware tools的解决方法
- Windows10|Windows10,Version,1903,7月更新,MSDN镜像下载
- Windows必备良心软件,让电脑更酷更高效率!
- 2019-07-08|2019-07-08 windows server
- vue.js|vue.js window.removeEventListener 移除