Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中优化OBJ文件(三维模型)加载_Java_Optimization_Wavefront - Fatal编程技术网

在java中优化OBJ文件(三维模型)加载

在java中优化OBJ文件(三维模型)加载,java,optimization,wavefront,Java,Optimization,Wavefront,在开始之前,我对代码中缺少注释表示歉意。我目前正在制作一个OBJ文件加载器(java)。虽然我的代码在小文件中可以正常工作,但当文件变大时(例如,我目前试图加载一个有25958行的OBJ文件),我的整个系统就会崩溃。最近我从C++中迁移了整个项目,它可以快速加载这个模型。我使用了一个分析器和一个调试器来确定整个进程在哪里使我的系统崩溃。我注意到了一些事情;首先,它悬挂在启动过程中;其次,我的堆几乎完全用完了(我使用了大约90%的堆) 我的代码可以在这里找到: 我对我可以用来优化这段代码的方法很好

在开始之前,我对代码中缺少注释表示歉意。我目前正在制作一个OBJ文件加载器(java)。虽然我的代码在小文件中可以正常工作,但当文件变大时(例如,我目前试图加载一个有25958行的OBJ文件),我的整个系统就会崩溃。最近我从C++中迁移了整个项目,它可以快速加载这个模型。我使用了一个分析器和一个调试器来确定整个进程在哪里使我的系统崩溃。我注意到了一些事情;首先,它悬挂在启动过程中;其次,我的堆几乎完全用完了(我使用了大约90%的堆) 我的代码可以在这里找到:
我对我可以用来优化这段代码的方法很好奇。

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

startChar = line[i].toCharArray()[k];
可能没有优化到

startChar = line[i].charAt(k);
自动的。也许内切字符串可以节省大量内存,试试String.intern或番石榴


热点喜欢短方法,所以重构。这段代码很难阅读,而且我猜,考虑到它的大小,根本没有进行任何优化

我知道这是个老生常谈的问题,但我想就你们的性能问题献出我的两分钱。您的意思是,您的代码不仅运行缓慢,而且占用了堆的90%。我认为说90%是一种过分的夸张,但这仍然允许我指出Java游戏开发的最大缺陷。Java不支持值类型,例如结构。这意味着为了提高速度,需要避免OOP,因为每次为装入器实例一个类时,它都被分配到堆中。然后,您必须始终等待GC启动,以消除加载程序创建的混乱和遗留实例。现在,以C#这样的语言为例,说明如何创建真正的语言。C#完全支持结构。您可以用它们替换装入器的每个类。然后将面、组、顶点、法线和类视为值类型;当堆栈展开时,它们将被删除。不会生成垃圾,或者如果需要使用一两个类,则至少很少生成垃圾

在我看来,不要将Java用于游戏开发。在发现C#之前,我用了很多年。严格地说,在这里,我认为Java是一种可怕的语言;我再也不会用它了