2013-09-22 46 views
0

在我開始我對我缺乏在我的代碼評論道歉。我目前正在製作一個OBJ文件加載器(在java中)。儘管我的代碼按照小文件的預期工作,但當文件變大時(例如,我正在嘗試加載一個包含25,958行的obj文件),我的整個系統崩潰了。我最近將整個項目從C++中遷移出來,可以快速加載這個模型。我在調試器旁邊使用了一個分析器來確定整個過程在哪裏崩潰了我的系統。我注意到了一些事情;首先,它是在啓動過程中懸掛的;第二,我的堆幾乎完全使用了(我用了堆的90%左右)。 我的代碼可以在這裏找到: http://pastebin.com/VjN0pzyi 我很好奇,我可以採用優化這個代碼的方法。優化OBJ文件(3D模型)加載在Java

回答

0

當你的內存真的很低,一切都變慢了很多。我想你應該提高你的編程技巧,像

startChar = line[i].toCharArray()[k]; 

可能沒有得到優化,以

startChar = line[i].charAt(k); 

自動的。也許實習你的字符串可以節省大量的內存,試試String.intern或Guava Interner

的熱點喜歡短的方法,使重構。代碼因爲它很難閱讀,我認爲,考慮到它的大小沒有優化完成!

0

我知道這是一個老問題,但我想在我的兩分錢扔在你的性能問題。你說你的代碼不僅運行緩慢,而且佔用了堆的90%。我認爲說90%是誇張的誇張,但這仍然讓我指出Java遊戲開發的最大缺陷。 Java不支持值類型,比如結構體。這意味着爲了獲得速度,你需要避免OOP,因爲每當你爲你的加載器實例化一個類時,它就被分配到堆上。然後,您必須始終等待GC啓動以消除混亂,並留下裝載程序創建的實例。現在以C#這樣的語言爲例如何創建真實語言。 C#完全支持結構。你可以用他們替換你的每一個裝載機類。然後將面,組,頂點,正常,類視爲值類型;當堆棧展開時它們被刪除。如果您需要使用一兩個課程,則不會生成垃圾,或者至少非常少。

在我看來,不使用Java進行遊戲開發。在發現C#之前,我使用了它多年。嚴格地說,在這裏,但Java是一種可怕的語言;我永遠不會再使用它。