我不是来吐槽firefox的,问个虚拟内存的问题
http://i115.photobucket.com/albums/n300/zerosyt/ScreenShot00008-3.jpg系统的虚拟内存给我放到ramdisk去了,pagefile我设定最大是668M
但是看图,这FF的虚拟内存占用量大大超过了实际的分页文件大小是啥原理
看不懂的飘过,我的firefox常年占用500m+内存 只有512M内存还用FF的我真是自作孽= =
http://i371.photobucket.com/albums/oo159/comeon1990/Snap1-13.jpg 3# 苏未挽
主要是因为我用了autopager这个吃内存的怪兽……
= = explorer 60m
firefox400m
这是什么样的工作环境 用少点扩展咯,装越多,内存越难释放,我现在常常400多,启用的控件有19个 任务管理虚拟内存不等于虚拟内存
任务管理里虚拟内存更加接近实际内存使用
其实任务管理的内存占用数据是轻易被修改的所以不要信的好
具体我也是一知半解的
求科普 用少点扩展咯,装越多,内存越难释放,我现在常常400多,启用的控件有19个
marimo 发表于 2010-2-1 19:28 http://bbs.saraba1st.com/images/common/back.gif
20+启用10+禁用插件
常驻10个标签左右也就150M 内牛满面 22启用1禁用,基本维持在400多……autopager看漫画时另算。 单位机子firefox经常开80page,占用800M内存 20启用9禁用
10标签页左右不到200M 物理内存越大的 好像会抓越多来当缓存 看内存占用,你只需看虚拟内存那列就可以了 37个插件31个启用
常见250左右 512内存,虚拟内存上到200以上反应就开始慢了,于是重启firefox。。。老爷机就是痛苦啊,扩展还只用了10个。。。 本帖最后由 鸡蛋灌饼 于 2010-2-7 19:26 编辑
看内存占用,你只需看虚拟内存那列就可以了
zmw_831110 发表于 2010/2/2 07:39 http://bbs.saraba1st.com/2b/images/common/back.gif
胡扯
虚拟内存那列显示的东西和实际使用的内存完全是两回事
真正有参考价值的是Peak Working set(Process Explorer)
还在看Virtual Memory的麻烦先把Virtual Memory是什么,还有操作系统是如何管理内存的搞清楚 本帖最后由 zmw_831110 于 2010-2-7 20:12 编辑
胡扯
虚拟内存那列显示的东西和实际使用的内存完全是两回事
真正有参考价值的是Peak Working set(Process Explorer)
还在看Virtual Memory的麻烦先把Virtual Memory是什么,还有操作系统是如何管理内存的搞清楚 ...
鸡蛋灌饼 发表于 2010-2-7 19:19 http://bbs.saraba1st.com/2b/images/common/back.gif
又是你
我又没说,虚拟内存显示的就是实际使用的内存.
我是说,要看PF爆不爆,只需看虚拟内存那个栏位即可
对于一般用户而言,虚拟内存显示的那个栏位比内存显示的那个栏位更有参考价值.因为后面PF显示的都是虚拟内存,包括峰值等一系列数值
你这个人真较真
有时候,发现PF占用比较多,看虚拟内存那项比看内存占用那项更靠谱,停止掉那项,PF就降低相应数值的PF占用.
这个是对一般用户最有效的
别在文字上较真,你真有心,给大家普及普及,别在这叫 XP系统下你设置的“虚拟内存·伪”=PAGEFILE页面文件(其实人家没错,你设置的页面文件扩大了系统的虚拟内存,但是人们都习惯把页面文件直接叫虚拟内存了)
页面文件与真实内存做统一地址映射成为“虚拟内存·真”
各种程序统统在“虚拟内存·真”中划分内存资源。
于是比如你有1G内存,在“虚拟内存·伪”中设置了512M,你的“虚拟内存·真”就是1.5G
那么你的程序所占用的“虚拟内存·真”大小比你的页面文件大就没有什么稀奇了。 XP系统下你设置的“虚拟内存·伪”=PAGEFILE页面文件(其实人家没错,你设置的页面文件扩大了系统的虚拟内存,但是人们都习惯把页面文件直接叫虚拟内存了)
页面文件与真实内存做统一地址映射成为“虚拟内存·真”
各种程序统统在“虚拟内存·真”中划分内存资源。
于是比如你有1G内存,在“虚拟内存·伪”中设置了512M,你的“虚拟内存·真”就是1.5G
那么你的程序所占用的“虚拟内存·真”大小比你的页面文件大就没有什么稀奇了。
touhouproject 发表于 2010-2-7 20:14 http://bbs.saraba1st.com/2b/images/common/back.gif
也就是XP系统任务管理器的”虚拟内存占用“显示的是“虚拟内存·真”?
这我就完全明白了,也就是把“虚拟内存·伪”——PAGEFILE页面文件禁用掉,“虚拟内存·真”=物理内存的总量?
又是你
我又没说,虚拟内存显示的就是实际使用的内存.
我是说,要看PF爆不爆,只需看虚拟内存那个栏位即可
对于一般用户而言,虚拟内存显示的那个栏位比内存显示的那个栏位更有参考价值.因为后面PF显示的都是虚拟内存,包括峰值等一系列数值
你这个人真较真
有时候,发现PF占用比较多,看虚拟内存那项比看内存占用那项更靠谱,停止掉那项,PF就降低相应数值的PF占用.
这个是对一般用户最有效的
别在文字上较真,你真有心,给大家普及普及,别在这叫
zmw_831110 发表于 2010/2/7 20:00 http://bbs.saraba1st.com/2b/images/common/back.gif
首先解释一下虚拟内存是什么。
一个常见的误解是虚拟内存是内存不足,把硬盘上的空间虚拟一部分当作内存使用。但事实远远不是这样。
虚拟内存,提供了一种机制分离虚拟的内存访问和实际的内存操作。让每个进程认为自己处于一个独立的4G的地址空间中。
然后解释一下操作系统的内存分配流程
当一个进程请求内存时,系统并不是直接把内存分配给这个进程,而是在操作系统用于管理进程的数据结构中做做修改,标出“某某地方(虚拟地址)的内存已经可以给该进程使用”。当进程真的访问这个地址时,操作系统才会把内存实际分配给它。
接下来解释一下XP taskmgr中的那个虚拟内存大小
那个虚拟内存大小,就是上面提到的“某某虚拟内存区已经可以给该进程使用”的总大小。至于该进程到底用了多少,消耗了多少系统资源,和这个“虚拟内存大小”关系不大。
实验:
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 0;
for(; i < 18; i++)
{
void *ptr = malloc(1024*1024*512); // 512MB
printf(\\"%ld\\n\\", ptr);
}
system(\\"pause\\");
return 0;
}
若想获得下文提到的戏剧性效果,请最好使用64位VC9编译器编译,并在64位Windows操作系统下运行此程序
测试环境Windows 7 x64 Ent.
Mem:2G
Page file:2G(managed by system)
结果如图。
http://farm5.static.flickr.com/4053/4339875319_749e744175_o_d.jpg
http://farm3.static.flickr.com/2719/4339875361_c7c4c6aa7f_o_d.jpg
http://farm3.static.flickr.com/2786/4339875405_c87cb021a9_o_d.jpg
http://farm5.static.flickr.com/4063/4339875445_28791fc170_o_d.jpg
由于我用的是Win7x64,它的taskmgr中已经没有“虚拟内存大小”这一栏了,故使用ProcessExplorer代替。
从ProcessExplorer中可以看到一个很可笑的虚拟内存大小:4.5G,这甚至超过了我的物理内存+页面文件总大小。
另外一方面,taskmgr给出的值就十分正常。
还有一个问题,这种情况是否常见?
分配一大块内存,但不立刻使用的情况还是比较多的,当程序想要自己管理内存,进行特化的内存分配处理时就会出现——通用的内存管理函数并不一定是最合适的。
最后回到正题,这个值有没有参考意义?
对于Firefox,答案是“有一些”,据我(很久之前了,如上文所提Windows 7的taskmgr已经没有这个容易造成混乱的值可看了)观察,Firefox的实际内存消耗和“虚拟内存大小”是正相关的。 那么请问,XP下,看哪列靠谱?
页:
[1]