我想在我的J2ME(MIDP 2.0)程序中使用浮点数。
我不需要高精度,所以我正在考虑选择float
类型。在J2ME中实现最高性能的浮点数据类型
但是,在我看来,我读了一篇Java文章,其中说double
更好地支持处理器,所以速度更快。
我正在用这些数字进行很多操作,所以性能对我很重要。
现在的问题是,这些数据类型中哪一个工作得更快在J2ME?
我想在我的J2ME(MIDP 2.0)程序中使用浮点数。
我不需要高精度,所以我正在考虑选择float
类型。在J2ME中实现最高性能的浮点数据类型
但是,在我看来,我读了一篇Java文章,其中说double
更好地支持处理器,所以速度更快。
我正在用这些数字进行很多操作,所以性能对我很重要。
现在的问题是,这些数据类型中哪一个工作得更快在J2ME?
float和double之间的性能差异并不那么显着。
如果你正在做这些操作的频率比浮动更好,它也会占用更少的空间。
更新:
public long sumDouble(){
double[] arr = new double[1000];
for(int i = 0 ;i < 1000;i++){
arr[i]=new Random().nextFloat();
}
float sum = 0.0f;
long start = System.currentTimeMillis();
for(int i = 0 ;i < 1000;i++){
sum+=arr[i];
}
System.out.println(""+sum);
long end = System.currentTimeMillis();
return end - start;
}
public long sumFloat(){
double[] arr = new double[1000];
for(int i = 0 ;i < 1000;i++){
arr[i]=new Random().nextDouble();
}
double sum = 0.0f;
long start = System.currentTimeMillis();
for(int i = 0 ;i < 1000;i++){
sum+=arr[i];
}
System.out.println(""+sum);
long end = System.currentTimeMillis();
return end - start;
}
尝试在真实设备执行这些方法来衡量性能差别它不是太大显著。
你有这方面的证据吗? – 2010-11-14 12:03:43
@BlaXpirit更新了答案 – 2010-11-14 12:15:34
正如所有性能问题的规则:测量它。例如,你可以用浮动来编写你的程序,测量它的性能(显然在目标平台上),做一个serach&replace来加倍,再次测量性能,然后比较。 – meriton 2010-11-14 12:00:49
那么,这是J2ME,一切都可能发生...在模拟器'双'可能会更好,但在实际的手机'浮动'可以赢。 – 2010-11-14 12:02:41
这就是为什么你会在目标设备上进行测量的原因:-) – meriton 2010-11-14 12:04:06