我有一個基於Java的命令行服務器運行,它託管我在我的網站上製作的遊戲的高分。它工作高效快速。但是,它佔用了大約200MB的RAM!我曾嘗試一切從手動歸零了一切調用System.gc() Java遊戲服務器佔用太多內存!
我開始懷疑,這可能是與輸入流和輸出流對象,我從Socket連接使用。我注意到當我第一次運行程序時,它佔用了正常數量的RAM。然後一旦獲得連接,它就會跳到100MB,並且每個連接都會變得更高。
編輯:在我的班級之一,我認爲所有的名字,成績,並在3周不同的ArrayList時間戳。但是,使用jhat和jmap進行的徹底檢查表明,它們僅使用大約5MB的RAM。
如果這太過於模糊,任何人都不能回答,請問我會很樂意給出源代碼。
如果您發現它隨着每個連接而上升並且在客戶端斷開連接時不下降,那麼您可能會保留對已關閉套接字的引用。 – ide 2011-02-05 04:15:43
如果JVM與.NET類似,那麼即使有沒有引用它們的未使用對象,「強制」垃圾收集也不能保證實際收集任何東西。另外,200M是花生,當你可以購買300GB的24GB內存。這真的是一個問題嗎? – 2011-02-05 04:42:29
@ide它隨着每個連接的增加而增加很多,然後隨着它們的斷開而下降一點,因爲我試圖在它們的生命結束之前手動將所有對象的每個引用歸零。 – ra4king 2011-02-05 04:59:56