为了账号安全,请及时绑定邮箱和手机立即绑定

循环引用导致内存泄漏?

循环引用导致内存泄漏?

慕桂英546537 2019-10-21 15:28:13
我试图减少Windows窗体应用程序中的内存泄漏。我现在正在查看包含几个嵌入式表单的表单。我担心的是,孩子的形式,在其构造,采取父窗体参考,并保持在一个私有成员字段。所以,在我看来,来的垃圾收集时间:父具有对儿童形式的引用,通过控制集合(子形式被嵌入在那里)。子窗体未GC'd。子形式具有与母体形式的引用,经由专用成员字段。父窗体不GC'd。这是对垃圾收集器如何评估情况的准确理解吗?任何方式“证明”它用于测试目的?
查看完整描述

3 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

好问题!

不会,这两种形式都是(可以)GC的,因为GC不会直接在其他参考文献中查找参考文献。它仅查找所谓的“ Root”引用...包括堆栈上的引用变量(变量在堆栈上,实际对象当然在堆上),CPU寄存器中的引用变量以及类中的静态字段...

如果所有其他参考变量在通过上述过程找到的“根”参考对象之一的属性中被引用(或在由根对象中的参考引用的对象中被引用),则仅对其进行访问(和GC处理)等)。

因此,只有在“根”引用中其他位置引用了其中一种形式时,这两种形式才能从GC中安全使用。

只有我能想到的方法来“证明”的,(不使用记忆痕迹的实用程序)将创建这些形式对夫妇十万,在一个循环的方法中,然后,而在方法,看一下应用程序的内存占用,然后从方法退出,调用GC,并在接地再看看。


查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 0 关注
  • 441 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信