[英]Java performance in creating objects
我正在努力提高我在Java性能優化方面的知識,並嘗試了多種方法來創建對象。
我遇到過這種行為,我對類中最終成員的使用並不熟悉:如果成員不是最終成員,則創建對象的成本要低得多(就時間而言)。 它是正確的還是我的代碼中有一些錯誤?
沒有最終成員的對象:
public class ComplexNumber {
private double re, im;
public ComplexNumber(double _re, double _im) {
re = _re;
im = _im;
}
public void setRe (double _re) {
re = _re;
}
public void setIm (double _im) {
im = _im;
}
@Override
public String toString() {
return re + " + i" + im;
}
@Override
public int hashCode() {
return 47 + 31*(int)re + 31*(int)im;
}
}
最終成員的對象:
public class FinalComplexNumber {
private final double re, im;
public FinalComplexNumber(double _re, double _im) {
re = _re;
im = _im;
}
@Override
public String toString() {
return re + " + i" + im;
}
@Override
public int hashCode() {
return 47 + 31*(int)re + 31*(int)im;
}
}
主要課程
public class PerformanceTest {
private static final long ITERATIONS = 100000000l;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ComplexNumber nr = new ComplexNumber(0, 0);
System.out.println(nr);
long time = System.currentTimeMillis();
for (int i = 0; i < ITERATIONS; i++) {
ComplexNumber num = new ComplexNumber(i, i);
}
System.out.println(System.currentTimeMillis() - time);
time = System.currentTimeMillis();
for (int i = 0; i < ITERATIONS; i++) {
nr.setIm(i);
nr.setRe(i);
}
System.out.println(System.currentTimeMillis() - time);
time = System.currentTimeMillis();
for (int i = 0; i < ITERATIONS; i++) {
FinalComplexNumber num = new FinalComplexNumber(i, i);
}
System.out.println(System.currentTimeMillis() - time);
}
}
結果:
run:
0.0 + i0.0
953
219
7875
BUILD SUCCESSFUL (total time: 9 seconds)
以下是您如何研究增加決賽對績效的影響: http : //shipilev.net/blog/2014/all-fields-are-final/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.