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

Odpovedet emailem