我用C#写了一个很长的TCP连接套接字服务器.我的服务器内存中出现峰值.我使用dotNet Memory Profiler(一种工具)来检测内存泄漏的位置.Memory Profiler指示私有堆很大,内存类似于下面(数字不是真实的,我要显示的是GC0和GC2的孔非常大,数据大小正常):
Managed heaps - 1,500,000KB
Normal heap - 1400,000KB
Generation #0 - 600,000KB
Data - 100,000KB
"Holes" - 500,000KB
Generation #1 - xxKB
Data - 0KB
"Holes" - xKB
Generation #2 - xxxxxxxxxxxxxKB
Data - 100,000KB
"Holes" - 700,000KB
Large heap - 131072KB
Large heap - 83KB
Overhead/unused - 130989KB
Overhead - 0KB
Run Code Online (Sandbox Code Playgroud)
Howerver,什么是GC漏洞?dotNet Memory Profiler的文档确定了"漏洞":
"Holes"表示在两个分配的实例之间未使用的内存.由于垃圾收集器中的固定实例或优化,堆未完全压缩时会出现"漏洞".
我想知道的是:
我希望有人可以解释一下.