【发布时间】:2010-09-11 07:00:50
【问题描述】:
我需要传递一个 x/y。我只是在使用 java.awt.Point。考虑到这是应用程序的本质,我经常这样做,但比普通数组慢很多。我还尝试创建自己的“FastPoint”,它只是一个 int x/y 和非常简单的类构造函数,这也很慢。
时间以毫秒为单位。
java.awt.Point: 10374
快速点:10032
数组:1210
public class FastPoint {
public int x;
public int y;
public FastPoint(int x, int y) {
this.x = x;
this.y = y;
}
}
Jvisualvm 表示,与简单的 int[] 数组相比,Point(awt 或我自己的)使用了大量内存。
我想这只是必须创建一个对象而不是基本类型的开销?有什么方法可以调整或优化这个 Point 类?我已经切换到基本的 int 数组(现在速度快了很多),但只是想了解为什么这很慢以及我能做些什么吗?
测试代码:
for (int i = 0; i < maxRuns; i++) {
point = new Point(i,i);
}
for (int i = 0; i < maxRuns; i++) {
a[0] = i; a[1] = i;
}
【问题讨论】:
-
我不相信使用数组代替对象会导致 900% 的时间增加。以毫秒为单位的时间 -> 但要做什么?
-
for (int i = 0; ifor (int i = 0; i -
另外,在您的数组版本中,您没有实例化数组。创建对象/数组和为同一数组中的给元素赋值之间的成本差异是vast。