• 关于Managed Thread Stack 内存占用


               CLR会通过VirtualAlloc预先提交整个栈,提交之后就立即占用物理空间(物理内存或磁盘)。也许你会发现查看内存占用的时候看起来并没有占用那么多内存,那是因为线程栈一般很少用到1M内存的全部,提交内存在未被使用之前并不会真正分配。看看我的内存截图:

     

    提交数内和已用内存并不相等,因为很多提交内存并未真正分配出去。

    那是不是就真的不占用内存了?看下面有看了3000个线程,在继续加就OutOfMemory了。

     

    看以看出虽然并没有使用完物理内存,但将物理内存“预订“下了,这块物理内存也无法干其他用了。

     

    看以看到真实分配了1G内存,而工作集只有56M。

    在这儿看来分配磁盘虚拟物理内存也是很有必要的,想我这样完全关闭磁盘虚拟地址就很大程度的浪费内存了。 

    在做full dump的时候dump文件往往要比实际Working Set 大,有时候出奇的大很多,尤其线程数多的进程,dump完了后内存占用也蹭的涨起来了,我想可能是dump了整个已提交地址空间。

    就算64下虚拟地址空间足够用,但物理地址空间是很有限的,还得控制一下提交量啊,别占着茅坑不拉屎,明明有内存还OutOfMemory。。。

  • 相关阅读:
    Dojo(发音:豆粥)的目标是解决DHTML应用程序长期存在的历史问题
    如何用Fireworks制作图标的透明效果
    2021.09.15膜你赛
    2021.09.14 膜你赛
    2021.08.29 膜你赛
    2021.08.28 膜你赛
    2021.10.06 膜你赛
    2021.09.18 膜你赛
    2021.09.13膜你赛
    2021.10.05膜你赛
  • 原文地址:https://www.cnblogs.com/lulu/p/2591694.html
Copyright © 2020-2023  润新知