循环引用导致内存泄漏?

我试图减少Windows窗体应用程序中的内存泄漏。我现在正在查看包含几个嵌入式表单的表单。我担心的是,孩子的形式,在其构造,采取父窗体参考,并保持在一个私有成员字段。所以,在我看来,来的垃圾收集时间:


父具有对儿童形式的引用,通过控制集合(子形式被嵌入在那里)。子窗体未GC'd。


子形式具有与母体形式的引用,经由专用成员字段。父窗体不GC'd。


这是对垃圾收集器如何评估情况的准确理解吗?任何方式“证明”它用于测试目的?


慕桂英546537
浏览 443回答 3
3回答

撒科打诨

好问题!不会,这两种形式都是(可以)GC的,因为GC不会直接在其他参考文献中查找参考文献。它仅查找所谓的“ Root”引用...包括堆栈上的引用变量(变量在堆栈上,实际对象当然在堆上),CPU寄存器中的引用变量以及类中的静态字段...如果所有其他参考变量在通过上述过程找到的“根”参考对象之一的属性中被引用(或在由根对象中的参考引用的对象中被引用),则仅对其进行访问(和GC处理)等)。因此,只有在“根”引用中其他位置引用了其中一种形式时,这两种形式才能从GC中安全使用。只有我能想到的方法来“证明”的,(不使用记忆痕迹的实用程序)将创建这些形式对夫妇十万,在一个循环的方法中,然后,而在方法,看一下应用程序的内存占用,然后从方法退出,调用GC,并在接地再看看。
打开App,查看更多内容
随时随地看视频慕课网APP