Zdravím konferenci,
před časem jsem se někde dočetl, že využití automatického převodu
datových typů z javy 1.5 je značně neefektivní.
Zkusil jsem si tedy napsat test na kterém bych to ověřil. Ten však
ukázal vcelku zanedbatelné rozdíly.
Proto bych se chtěl zeptat ostatních na praktické zkušenosti, sám novou
syntaxi zatím příliš nepoužívám.
Jirka
Pro ilustraci uvádím kód, spuštěný na linuxu (2.6.8) a Sun JDK 1.5_04:
public static void main(String[] args) {
Runtime r = Runtime.getRuntime();
log("volná paměť: "+r.freeMemory()+", celková paměť :
"+r.totalMemory());
log("testování na primitivních datových typech");
long time1 = System.currentTimeMillis();
int constant = 0;
for(int i=0;i<100000;i++){
constant=constant+i;
}
log("trvání "+(System.currentTimeMillis()-time1)+" milisec.");
log("volná paměť: "+r.freeMemory()+", celková paměť :
"+r.totalMemory());
System.gc();
log("kombinace primitivních datových typů a objektů");
time1 = System.currentTimeMillis();
Integer c1 = new Integer(0);
for(int i=0;i<100000;i++){
c1=c1+i;
}
log("trvání "+(System.currentTimeMillis()-time1)+" milisec.");
log("volná paměť: "+r.freeMemory()+", celková paměť :
"+r.totalMemory());
System.gc();
log("sčítání objektů");
time1 = System.currentTimeMillis();
c1 = new Integer(0);
for(Integer i=new Integer(0);i<100000;i++){
c1=c1+i;
}
log("výsledek = "+c1);
log("trvání "+(System.currentTimeMillis()-time1)+" milisec.");
log("volná paměť: "+r.freeMemory()+", celková paměť :
"+r.totalMemory());
}
Výstup byl:
volná paměť: 1853104, celková paměť : 2031616
testování na primitivních datových typech
trvání 8 milisec.
volná paměť: 1842616, celková paměť : 2031616
kombinace primitivních datových typů a objektů
trvání 13 milisec.
volná paměť: 1877808, celková paměť : 2031616
sčítání objektů
výsledek = 704982704
trvání 13 milisec.
volná paměť: 1855232, celková paměť : 2031616