大對象堆與GC第3代對象之間的區別是什麼?第3代對象與大對象堆的區別
4
A
回答
17
LOH(大對象堆)是一個單獨的堆,其中大對象直接分配並保留,直到它們被收集。對象根據其大小直接分配到LOH中,例如,等於或大於85000字節。
分代對象是分配到單個堆的SOH(小對象堆)中的「小」對象。 SOH中的對象具有關聯的一代,其表示在最大代數之後他們已經存活了多少集合,例如, 2.由於代號從0開始,第2代中的對象可以被描述爲第3代,因爲它已經存活了最少3個集合,即世代0,1,2。
世代有助於優化垃圾掃描。長壽命物體的世代數量在收集時保持增長,而數量較高的世代的掃描次數較少。這種機制導致不是短暫的對象被掃描的頻率較低,因此不必要地進行掃描。世代方案適用於SOH,因爲它被看作是一個很好的優化堆的地方會有很多的對象。
更新
據我瞭解LOH對象報告爲最大值產生之中,但我相信這只是一個默認值。它們實際上並不屬於任何一代,即第二代SOH對象和LOH對象不在同一個「列表」中。但是,正如@亨克指出的那樣,在進行第二代收集時,此時還收集了LOH對象。所以在概念上,第二代和LOH之間存在關係。這是因爲NET 2.0的正確:
參見:Large Object Heap Uncovered
從一個產生點,大對象屬於第2代,因爲他們只收集時,有一個2代集合。
但是,雖然收集關係是明顯的,但它不成立的例子是生成壓縮。當收集一代時,它也可能被壓縮。然而,LOH並沒有被壓縮,所以不能說第二代物體發生的一切都發生在LOH中的物體上。
[Test]
public void large_object_heap_objects_are_reported_as_max_generation()
{
int[] bling = new int[85000/4];
int maxGen = GC.MaxGeneration;
int objectGen = GC.GetGeneration(bling);
Assert.AreEqual(maxGen, objectGen, "Large object is at max generation.");
}
相關問題
- 1. 大對象堆
- 2. 來自IIFE的對象與返回對象之間的區別
- 3. WCF-代理對象,服務對象和普通類對象之間的區別
- 4. 可比對象與對象類型之間的區別
- 5. Java對象與用戶定義對象之間的區別
- 6. OpenCV與對象的區別計數
- 7. 機器代碼與對象代碼之間的區別
- 8. GC.Collect僅適用於第2代和大型對象堆
- 9. 區別對象的屬性
- 10. 大對象堆友好IDictionary
- 11. 得到巨大的JSON文件3第一JSON對象與GSON
- 12. 數組與對象有什麼區別?
- 13. 對一堆對象的迭代
- 14. Python是否有靜態對象,堆棧對象和堆對象?
- 15. 區別對象和功能
- 16. lodash Mongoose對象ID區別
- 17. 堆生成2和大對象堆爬
- 18. Python&OpenCV:第二大對象
- 19. 來自隊列的大對象堆和字符串對象
- 20. 把對象當作指針或對象來區別對待?
- 21. 對象堆
- 22. 堆中Java最大對象大小
- 23. 堆上的對象
- 24. 數據傳輸對象(DTO)與愚蠢的業務對象之間的區別?
- 25. 普通類的對象與泛型類的對象是否有區別?
- 26. Groovy對象和Java對象在Groovy代碼中的功能有什麼區別?
- 27. 對象與對象
- 28. 節點對象和元素對象的區別?
- 29. null ==對象和對象== null之間的區別
- 30. 面向對象和非面向對象之間的區別javascript
你的意思是第二代堆? – 2011-02-02 14:12:13
是如果計數形式0 1 2 ..第二個 – 2011-02-02 14:19:52