Par poznamecek k testu;) Na mereni kratkych casu nepouzivejte System.currentTimeMillis() ale System.nanoTime(), nevim jak na linuxu, ale na woknech ma ta prvni metoda presnost asi 16ms a to dokaze vysledky poradne zkreslit.
Jak psal uz prede mnou pan Buchta - test by mel bezet pokud mozno delsi dobu. Taky je dobre brat vysledky az po urcite dobe behu, at muze optimalizator ukazat co umi. Jednotlive testy by mely byt spoustene nezavisle na sobe, pokazde v nove JVM. Jinak se diky runtime optimalizaci stavaji ruzne 'podivnosti', napr. zjistite, ze kod bezi jinak dlouho po prehozeni poradi provadeni jednotlivych testu ap. Nemerite spotrebovanou pamet ale jen pamet pred a po.. Zapnete si logovani GC a uvidite, jak se pri pouziti wrapperu chudak nadre.. Jinak co se tyce auto(un)boxingu, osobne bych se mu maximalne vyhybal. Nerikam, ze se pouzivat nema, ale rozhodne ne jako nahrazka za primitivni typy tam, kde to neni skutecne potreba. Je to zbytecne plytvani vykonem, prinasi to ruzne neotrele problemy.. Taky je dobre si (aspon Eclipse to umi) zapnout obarvovani boxingu, pekne tucne, cervene, podtrzene;) jako prevenci moznych uklepu.. Jarda -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Behalf Of Jiri Chaloupka Sent: Tuesday, August 30, 2005 10:35 PM To: Java Subject: efektivita automatického převodu datových typů 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
