2012-12-13 56 views
0

一週前,我的教授談論垃圾收集及其響應能力。基本上他說,如果你使用垃圾收集,你將永遠有一個非常小的延遲纔會執行代碼。Garabage collection - Responsiveness

現在你可以說用戶不會識別延遲,因爲它很小。

我正在爲我的最終單身漢考試開發一款遊戲引擎,目前我正在決定選擇哪種腳本語言作爲我的引擎。


現在我有以下情況。 可以說你用第一人稱相機創建了一個遊戲。我們還要說,gamelogic是用垃圾收集語言編寫的。

難道這並不意味着用戶會遇到更多的輸入滯後,而不是玩一個遊戲,其中gamelogic是用沒有垃圾回收的語言編寫的?

現在輸入滯後很難預測,因爲有太多的系統會產生延遲。

例如input -> gamecode executing -> graphics rendering -> rendering on the screen

是否大致可預測我會得到多少延遲如果我使用gc vs沒有gc的語言的語言?<1ms, <10ms <100ms

+2

哇,這是一個加載的人。我想爲你的目的說,GCing不會產生巨大的影響。即使你使用了像C這樣的語言,當你「免費」時,你的程序仍然需要花費時間來釋放內存。它不像任何語言的瞬時。「 – thatidiotguy

+0

擴展到thatidiotguys的答案,它也取決於該語言使用的GC方案。例如,引用計數往往比標記和掃描(粗糙的說)更快。 – StoryTeller

+0

」你在執行代碼之前總會有一個非常小的延遲「可能他把GC和JIT編譯混淆了...... –

回答

1

關於GC的唯一「可怕」的事情是(1)它可能「感覺」較慢,因爲它會一次清理多個對象,而不是隨着代碼的進展而一個接一個地執行, (2)它是非確定性的,這使得它有點不可預測(但並不像聽起來那麼可怕)。

除了GC發生在特定時刻,所以它不會讓你的代碼「不斷」變慢。實際上,我認爲當程序不在GC中時,程序會變得更快一些,因爲外部GC不會像在非GC語言中那樣清理對象(而且應該),而內存管理機制在GC之後通常意味着分配比在非GC語言中分配要快一些。