2012-06-20 39 views
0

我一直在閱讀有關垃圾收集的內容,但是所有的描述都假設您已經實現了一個堆,分配和記住您的對象。適用於GC的內存堆數據結構?

我發現很難找到有關託管堆的經文。有人可以提一些算法,數據結構和其他資源嗎?

+0

使用資源的鏈接? Programmers.SE? – sehe

+0

@你指「使用的資源鏈接」是什麼意思?請不要將此列爲鏈接列表或書籍列表。我只想對答案中存在的可能性有一個很好的總體概述。 –

+1

我想sehe想知道你已經找到了什麼資源,爲什麼你找不到它們。 –

回答

0

我不太清楚你在這裏問什麼 - 堆的管理與實際的垃圾收集算法相當緊密地交織在一起,所以我對你提到的引用沒有解釋有點驚訝如何管理堆。如果你能指出你讀過的描述,這可能會有所幫助。

我想你的問題的根源可能是內存管理器如何實際跟蹤所有已分配的對象,以便它可以找到那些不再被引用的對象。最簡單的方法是通過鏈接的分配對象列表 - 指向列表中下一個對象的額外空間分配給每個對象。

非垃圾回收的內存管理器通常也會保留已釋放對象的列表,但垃圾回收內存管理器通常可以避免這種情況,因爲它可以識別指向特定對象的所有引用對象,允許它通過在內存中移動對象來壓縮內存。因此,它可以假設它將始終有一個連續的可用內存塊,並且只保留一個指向可用內存開始處的基址指針。

This article是一個有用的起點,它解釋了.NET中內存管理的一般原理。