查看: 4846|回复: 12
收起左侧

[已解决] 关于内存占用

 关闭 [复制链接]
asplay
发表于 2010-4-9 20:41:26 | 显示全部楼层 |阅读模式
我用XP SP3,现在开机内存占用在370MB左右,和舍友电脑(320MB)差不多
但是新奇的事发生在启动同一软件:ADAMS之后,我的内存要吃到900MB左右,我舍友还在390MB左右……


本以为不同的几百MB是存到虚拟内存里去了,但是我又发现一个问题,我的虚拟内存明明设到H盘了,但是H盘下根本就没有pagefile.sys,而C盘下却有……
打开虚拟内存设置页面,明明写着只有H盘下有1.5G的虚拟内存分配,但是重启几次都没变……


到底是怎么回事呢?
Anderson997
发表于 2010-4-9 21:07:23 | 显示全部楼层
你室友的电脑才不正常…………
adams虽然不大
但启动之后怎么可能不用内存呢…………

你先取消然后再分配看看
放C盘有什么不好么?
asplay
 楼主| 发表于 2010-4-9 21:16:14 | 显示全部楼层
我试过分配好多次了,它就是不起效……

我在办公室看到几台电脑,开两个ADAMS,内存只吃到590MB,不像我开一个吃到900MB……

至于不放C盘,还是为了少点磁盘碎片
Anderson997
发表于 2010-4-9 21:19:52 | 显示全部楼层
1. 你内存一共多大?
2. 那些多出来的全都给adams用了?
3. 就那点碎片…………华丽的无视…………
asplay
 楼主| 发表于 2010-4-9 21:26:25 | 显示全部楼层
物理内存1.5G,然后系统不知道为什么自动在C盘下弄一个1.5G虚拟内存……

启动ADAMS前内存占用400MB,启动后就跳到900MB+。所以多出来的就是ADAMS在用

碎片就算了,现在先解决内存占用问题吧
现在我开一个ADAMS或者ANSYS,然后再开两三个常用小软件,1.5G内存就不行了
Anderson997
发表于 2010-4-9 21:42:13 | 显示全部楼层
回复 5# asplay


    额…………
我不会用adams
不过单单开启的话
貌似确实不会占用多少……
100+吧
asplay
 楼主| 发表于 2010-4-9 22:01:27 | 显示全部楼层
总之,我的机器运行程序内存占用明显过大!!!!

不过为什么捏?
brilight
发表于 2010-4-9 22:17:58 | 显示全部楼层
本帖最后由 brilight 于 2010-4-9 22:19 编辑

我们先做个实验:
     

     

     

结果发现什么:最小化窗口,总内存508MB不会减少,但是程序 所谓的”内存使用“却减少了(81MB -->18MB)?

物理内存,有一部分是给进程的私自使用的,另一部分是给共享文件使用的,还有一部分是给内核使用的。

程序运行后,不仅依赖于自己,还依赖于系统的资源(例如要求让屏幕显示),所以程序使用的内存不仅包括自己的私有内存,还包括系统模块占用的内存,内核的内存。为了实现一些特殊的功能,有些程序加载自己的驱动程序sys文件,而sys文件是系统共享的,所以程序个人使用的内存算在了系统的头上!驱动程序可以任意占用内存而不会显示在进程里面。使用驱动程序的有 :各种硬件,虚拟光驱软件,杀毒软件等等,例如Ramdisk驱动可以占用1GB内存当作磁盘,Process Monitor驱动可以占用300MB记录日志文件,网银,支付宝,早版本的qq也使用了驱动。
所以你会发现,把所有程序的私有内存相加,肯定不等于总内存。

用任务管理器查看进程真实的内存占用的方法是:
  在系统内存平稳的情况下,
       对于普通的程序,开机后 查看程序冷启动前 和 启动后 的系统“总”内存差值。
       对于需要重启的软件,(如杀毒软件),先重启 在安装前 记录下系统的总占用内存,再重启 再记录一下,差值就是了。

如果只有A.exe 和B.exe 使用z.dll,先启动的程序会加载z.dll,后启动的不会加载z.dll。你把这个dll的内存占用归于谁?归于先启动的。所以对于后启动的程序,用上面的方法计算出的内存占用会变小。所以我建议所有程序测试应该是在重启后立即测试。而不应该打开一大堆程序再测试。

从第2和第3张图片看到,程序最小化以后,“内存使用”这个值减小了呢(81MB变为18MB),而总内存507MB保持不变!无论怎么减少所谓的“内存使用”,物理内存占用都不会减少。
其实任务管理器中 “内存使用” 这个术语是错误的:这个和内存占用无关。

另一个名词,“虚拟内存大小”这个术语也是错误的:这个是进程的私有内存(英文private size) ,因为进程会使用 系统的资源,所以程序实际占用内存 > 这个显示的值。  
所以你应该明白了:在任务管理器中,“内存使用”这个值毫无意义,“虚拟内存大小” 这个值也肯定少于真正占用的内存。

最后附上名词解释:

1.任务管理器中的“内存占用” 应该为 “Working set” ,(=进程最近使用过的内存)。

2.任务管理器中的“虚拟内存占用” 应该为 “private size”(=进程私有内存)

3.控制面板 -->系统 --> 性能 里面有一项 叫“虚拟内存”,其实这种说法是错误的。应该叫“页面文件”,指的是 把一快的硬盘区域当成内存一样读写,跟程序使用多少内存无关。页面文件是不会反应在任务管理器的进程中的。

结论:
1.程序真正占用的内存 > Private size
2.通过任务管理器总内存的变化可以计算程序内存
asplay
 楼主| 发表于 2010-4-10 09:48:21 | 显示全部楼层
LS的分析好详细!

我在查看内存占用时,也是通过查看程序启动前和启动后内存占用的差值来计算的
至于这些程序用到了多少系统资源,我不知道,但怎么说也不会让我和舍友开同一程序,内存使用相差近500MB吧?

我现在算是无语了。开一个ANSYS要500MB,开一个ADAMS要500MB,开APACHE也要500MB
上面这些程序开任何一个,我1G内存就没了……
穿越星空
发表于 2010-4-10 15:30:37 | 显示全部楼层
  内存占用大小跟其他硬件配置有关,不同是正常的,至于虚拟内存设置无效,楼主可以贴图看下。
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-6-18 15:45 , Processed in 0.130858 second(s), 18 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表