我相信通過GC實現者的設計,你不能加快 GC與無效。我相信他們更喜歡你不用擔心自己在GC運行時如何/如何對待它 - 正在保護和注視着你......(低頭向下,向天空揮拳) ...
就我個人而言,當我將它們作爲自我文檔形式完成時,我經常將變量明確地設置爲null。我沒有聲明,使用,然後設置爲null - 在不再需要它們之後立即刪除它。我明確地說,「我已與你正式完成......不見了......」
在GC'd語言中是否必須是無效的?不是。它對GC有幫助嗎?也許是的,也許不是,一定不知道,在設計上我真的無法控制它,不管今天的答案是這個版本還是那個,未來的GC實現可能會改變超出我的控制範圍的答案。另外如果/當零點優化出來,它只是一個看中評論如果你願意。
我想,如果它讓我的意圖更清晰,那麼下一個跟隨我的腳步的可憐的傻瓜,如果它有時可能幫助GC,那麼這對我來說是值得的。大多數情況下,這讓我感覺整潔清晰,蒙戈喜歡整潔清晰。 :)
我看起來就像這樣:編程語言的存在是爲了讓人們給他人一個意圖的想法和一個編譯器的工作請求 - 編譯器將該請求轉換成不同的語言(有時是幾個)--CPU(s)可以提供你使用的語言,你的標籤設置,註釋,風格強調,變量名等等 - CPU的所有關於比特流的信息,告訴它哪些寄存器和操作碼和內存位置twiddle。用代碼編寫的許多東西不會按照我們指定的順序轉換成CPU所消耗的東西。我們的C,C++,C#,Lisp,Babel,彙編程序或任何其他理論而不是現實,都是作爲工作陳述寫成的。你看到的不是你得到的,是的,即使是彙編語言。
我明白「不必要的東西」(如空白行)的思維方式「只是噪音和混亂的代碼。」那是我職業生涯的早些時候;我完全明白這一點。在這個時候,我傾向於使代碼更清晰。這不像我在我的程序中添加50行「噪音」 - 這裏或那裏只有幾行。
任何規則都有例外。在具有易失性存儲器,靜態存儲器,競態條件,單例,使用「陳舊」數據以及所有類型的腐敗的情況下,這是不同的:你需要管理自己的內存,鎖定和取消爲apropos,因爲內存不是GC'd宇宙 - 希望每個人都明白這一點。其餘時間使用GC語言,這是一個風格問題,而不是必要的問題,或者保證性能提升。
在一天結束時,請確保您瞭解什麼是符合GC的條件,哪些不符合條件;鎖定,處置和適當的廢除;打蠟,打蠟;呼吸,呼吸;對於我說的所有其他事情:如果感覺很好,那就去做吧。你的里程可能會有所不同,因爲它應該...
+1很好的問題。有沒有人知道編譯器將完全優化分配的情況?即有人在不同情況下查看MSIL,並注意到IL將對象設置爲空(或缺少)。 – 2010-09-27 07:43:55