【发布时间】:2017-11-20 08:52:52
【问题描述】:
我正在写一个Java项目,它使用了一个自定义对象——smallObject,它主要由double变量组成。
现在随着项目的发展,我要求 smallObject 中的每个变量都变成一个由 4 个元素组成的数组 - 所以什么是 double 变量,变成了一个 double 类型的数组,有 4 个元素 - bigObject。
使用bigObject的进程和smallObject一模一样,唯一不同的是它们包含一个元素编号,所以smallObject.a = 4,变成bigObject.a[2] = 4;
我期待由于每次访问数组时,我都会准确定义我需要的元素(不必搜索它),性能应该大致相同,但是,性能会降低一个因素2-3。这些对象用于数组列表和队列,最多可包含 300 万个元素。
是否可以预期性能会降低?我该如何解决这个问题?正在考虑使用单个变量(a[4],变为 a1、a2、a3、a4)——但这需要我有不同的类,以便每个类都可以访问正确的变量并使代码不可读。
感谢您的宝贵时间。
【问题讨论】:
-
数组访问总是涉及边界检查,这会增加可能变得显着的性能损失。
-
代码 sn-p 可以帮助解答。
-
您可能会受到边界检查和(可能更多)不良数据局部性的影响。用单个变量替换数组可能会有所帮助,但有更简单的方法。我们首先需要一些代码...
标签: java arrays performance