我試圖減少Windows窗體應用程序中的內存泄漏。我現在正在查看包含幾個嵌入式表單的表單。我擔心的是,孩子的形式,在其構造,采取父窗體參考,并保持在一個私有成員字段。所以,在我看來,來的垃圾收集時間:父具有對兒童形式的引用,通過控制集合(子形式被嵌入在那里)。子窗體未GC'd。子形式具有與母體形式的引用,經由專用成員字段。父窗體不GC'd。這是對垃圾收集器如何評估情況的準確理解嗎?任何方式“證明”它用于測試目的?
3 回答

撒科打諢
TA貢獻1934條經驗 獲得超2個贊
好問題!
不會,這兩種形式都是(可以)GC的,因為GC不會直接在其他參考文獻中查找參考文獻。它僅查找所謂的“ Root”引用...包括堆棧上的引用變量(變量在堆棧上,實際對象當然在堆上),CPU寄存器中的引用變量以及類中的靜態字段...
如果所有其他參考變量在通過上述過程找到的“根”參考對象之一的屬性中被引用(或在由根對象中的參考引用的對象中被引用),則僅對其進行訪問(和GC處理)等)。
因此,只有在“根”引用中其他位置引用了其中一種形式時,這兩種形式才能從GC中安全使用。
只有我能想到的方法來“證明”的,(不使用記憶痕跡的實用程序)將創建這些形式對夫婦十萬,在一個循環的方法中,然后,而在方法,看一下應用程序的內存占用,然后從方法退出,調用GC,并在接地再看看。
- 3 回答
- 0 關注
- 488 瀏覽
添加回答
舉報
0/150
提交
取消