就性能而言,在java中,双精度数组比自定义类好还是差?



我正在用Java编写一个GJK算法(凸形状碰撞)的简单实现,它涉及到很多关于3D向量的简单计算。就性能与可读性而言,将点存储为double[3]并拥有一整套静态方法来处理它们(add, subtract, dot, cross, negate等)或使用包含其中方法的类会更好吗?

双精度数组的问题在于,如果要做一个简单的减法(例如),如果使用专门的方法,则需要多个循环,或者如果硬编码,则代码会变得很长。Point对象使代码更具可读性,但是为了我所假定的不是微不足道的性能开销,它值得吗?

我的建议是:用你最省力的方法让它工作,然后再优化它。结果可能是应用程序中的瓶颈完全是另一回事,而碰撞检测的改进只是一小部分。

例如,假设您发现您的应用程序花费10%的时间进行碰撞检测,50%的时间用于磁盘读取。如果您可以使用缓存将磁盘读取减少一半,则可以将执行效率提高25%,这是完全消除冲突检测时间所能达到的最佳效果的两倍以上。

正如Donald Knuth所说:"过早优化是万恶之源。"

如果您需要执行操作,搜索或编辑数据的其他功能,我会使用该对象。也许你的基类可以是一个数组。

依我之见,OOP的基本原则是让对象定义一个契约并履行它们的职责(通常是单一的)。所以你一定要走课堂路线;这也将使你的类更易于维护和可读性。

创建一个类总是更好的,这样不仅可以实现可读性,而且还可以实现可扩展性,你可以随时扩展你的类的意义。在我理解oops的魔力之前,我也曾经有过同样的感觉,但现在我真正知道它会给我的项目带来什么不同。你可以从oops中获得很多建议

我想

Point point = new Point(x, y, z);

更像一个点
double[] point = {x, y, z};

那么,去上课吧!

最新更新