4 回答

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊
在閱讀有關(guān)GC如何工作的描述以及關(guān)于壽命長(zhǎng)的對(duì)象如何在第二代中結(jié)束的部分以及LOH對(duì)象的收集僅在完全收集時(shí)發(fā)生-與第二代的收集一樣,這個(gè)想法浮現(xiàn)在腦海。 ..為什么不將第二代和大型對(duì)象放在同一堆中,因?yàn)樗鼈儗⒈皇占谝黄穑?/p>
如果這是實(shí)際發(fā)生的情況,那么它將解釋小物體如何最終與LOH并存-如果它們的壽命足夠長(zhǎng),可以在第二代中終結(jié)。
因此,您的問(wèn)題似乎很好地反駁了我的想法-這將導(dǎo)致LOH分散。
摘要:你的問(wèn)題可以通過(guò)蕙解釋和第2代共享同一個(gè)堆區(qū),盡管這絕不是證明,這樣的解釋。
更新:!dumpheap -stat
幾乎所有的輸出使這一理論無(wú)所作為!第二代和LOH有自己的區(qū)域。

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊
很好的問(wèn)題,我通過(guò)閱讀問(wèn)題中學(xué)到了。
我認(rèn)為反序列化代碼路徑的其他部分也正在使用大對(duì)象堆,因此會(huì)產(chǎn)生碎片。如果所有琴弦都在同一時(shí)間被扣押,我想你會(huì)沒(méi)事的。
鑒于.net垃圾收集器的性能如何,僅讓反序列化代碼路徑創(chuàng)建普通的字符串對(duì)象就足夠了。在需求得到證實(shí)之前,不要做任何更復(fù)雜的事情。
我最多只能看看保留您所看到的最后幾個(gè)字符串的哈希表,然后再使用它們。通過(guò)限制哈希表的大小并在創(chuàng)建表時(shí)傳遞該大小,可以停止大多數(shù)碎片。然后,您需要一種方法,從哈希表中刪除您最近未看到的字符串,以限制其大小。 但是,如果反序列化代碼路徑創(chuàng)建的字符串壽命很短,那么您將不會(huì)獲得太多收益。
- 4 回答
- 0 關(guān)注
- 553 瀏覽
添加回答
舉報(bào)