优化在java中加载的OBJ文件(3d模型)

时间:2013-09-22 00:20:42

标签: java optimization wavefront

在开始之前,我为我的代码中缺少评论而道歉。我目前正在制作一个OBJ文件加载器(在java中)虽然我的代码按照小文件的预期工作,但是当文件变大时(例如我目前正在尝试加载一个有25,958行的obj文件)我的整个系统崩溃了。我最近从C ++迁移了整个项目,可以快速加载这个模型。我使用了一个分析器和一个调试器来确定整个进程崩溃我的系统的位置。我注意到了一些事情;首先,它悬挂在启动过程中;第二,我的堆几乎完全耗尽了(我用了大约90%的堆。) 我的代码可以在这里找到: http://pastebin.com/VjN0pzyi 我很好奇我可以用来优化这段代码的方法。

2 个答案:

答案 0 :(得分:0)

当你内存真的很低时,一切都会慢下来。我想你应该提高编码技能,比如

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

可能没有得到优化

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

自动地。也许实习你的字符串可以节省大量内存,尝试String.intern或Guava Interner

Hotspot喜欢简短的方法,所以重构。这段代码难以阅读,我想根据它的大小,根本没有优化!

答案 1 :(得分:0)

我知道这是一个老问题,但我想在你的表现问题上投入两分钱。您说您的代码不仅运行缓慢,而且占用了90%的堆。我认为说90%是夸张的夸张,但这仍然让我指出了Java游戏开发的最大缺陷。 Java不支持值类型,例如结构。这意味着为了获得速度,您需要避免OOP,因为每次为您的加载器实例化一个类时,它都会被分配到堆上。然后你必须等待GC开始摆脱杂乱并留下你的加载器创建的实例。现在使用像C#这样的语言作为如何创建真实语言的示例。 C#完全支持结构。您可以用它们替换每个类的加载器。然后将面,组,顶点,正常,类视为值类型;当堆栈展开时它们被删除。如果您需要使用一两个类,则不会产生垃圾,或者至少非常少。

在我看来,不要使用Java进行游戏开发。在发现C#之前我使用了它多年。严格来说,我认为,但Java是一种可怕的语言;我永远不会再使用它了。