- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
以下是我的程序在极其密集地使用内存后的统计数据,在高峰期消耗了 6 GB,但随后将所有内容保存到磁盘并且几乎没有剩余空间:
观察到几乎所有东西都超出了范围并已被垃圾回收 - 堆大小很小。然而,.NET 保留了 181 MB已提交。
我不介意保留字节,因为这只会消耗地址空间。但是提交的内存很烦人——即使它只驻留在页面文件中,它仍然很多。
最佳答案
根据CLR Inside Out - Large Object Heap Uncovered CLR 在 Gen 2 垃圾回收期间取消提交未使用的已提交内存。
这意味着您可以等待第 2 代垃圾回收自行发生,也可以使用 GC.Collect()
强制进行 - 您确实需要如果你选择这条路线,要知道你在做什么,但是因为它与垃圾收集器的标准垃圾收集周期相混淆,这真的会影响性能:
据我所知(根据我相当有限的研究),CLR 在其他情况下不会释放已提交的内存。
您还应该考虑这是否真的是一个问题:
更新: Advanced .NET Debugging: Managed Heap and Garbage Collection似乎支持内存仅在第 2 代/完整收集期间未提交的假设:
When objects in generation 2 are collected, the CLR heap manager decommits memory in the segments, and when a segment is no longer needed, it is entirely freed.
关于.net - 如何让 .NET 取消提交未使用的 RAM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8212524/
我是一名优秀的程序员,十分优秀!