2013-09-22 49 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是一种可怕的语言;我永远不会再使用它。