近日研究CLR和GC,在msdn blog上面看到MS CLR測試小組的一個女技術員提出了十幾個問題,感覺問題都挺有趣,也有一定的難度,遂加以修改,刪除了幾個又添加了幾個,廣泛徵集回答 ^_^
1. 一個主控處理序,如果運行在一個雙核CPU的機器上,GC是運行於Server GC模式,在假設CPU沒有Hyper thread功能的話,這個主控處理序會有幾個GC Thread?可以用調試工具來證明你的判斷嗎?
2. 在一個多核的伺服器上,如果運行一個winform app程式,這個程式對即時響應的要求比較高,應該使用哪種GC模式?為什嗎?(可以選擇Server GC,Workstation GC,Concurrent-Workstation)
3. 在什麼情況或者什麼操作下,會進行一次記憶體回收?
4. 什麼使一個Object從Generation 0移動到Gen 1,或者是從Gen 1到Gen 2?Pinned Objects呢?
5. 如果一台機器是四核CPU,在運行Server mode的GC和Workstation Mode的GC的時候,分別有多少個GC Heap?
6. 在Dotnet Framework 2.0下,如果發現一個進程裡面載入了mscorwks.dll,那麼可以因此判定這個線程是運行在Workstation Mode的GC下面?
7. 可以手工的改變一個進程的GC運行模式嗎?在什麼樣的情況下如何修改?
8. 為什麼要在開啟一個資料庫連接時候用完了就關閉這個串連?GC不會給我們處理這些事情嗎?
9. Strong References,Weak Reference,Pinned Reference有什麼區別?
10. 在Large Object Heap中,所有的大對象是沒有經過篩選順序堆放在一起的嗎?
也沒有真正的標準答案,回答的有理有據就對。
如果大部分的問題對於你來說都是小case,那麼趕緊告訴我你的msn吧,俺這裡還有一大票Puzzling Question Queue…..