Pokud se nepletu, tak na windows je defaultní client VM, zatímco jinde server VM. Liší se v tom kdy a jak provádějí kompilaci a optimalizace JITem.
Takže teoreticky je možné, že -client provede ihned optimalizaci a vyhodí přetypování na Employee, zatímco -server se pokusí alespoň jednou provést smyčku bez optimalizace. Hodně záleží na tom, jak vypadá bytecode. Samotný kód v Javě tady moc nepomůže, protože z něj nevidíme zda tam to přetypování opravdu je nebo není (ale nejspíš je, když se provádí). Kamil Podlešák 2010/8/10 Ondra Medek <[email protected]>: > Sorry, napsal jsem to spatne. Toto: > > for (Object object : list) { > @SuppressWarnings("unchecked") > Map<String, Object> map = (Map<String, Object>)object; > // ... > } > > projde na Win, ale na Linuxu ne. Toto: > > for (Object object : (List<?>)list) { ... } > > projde vsude. > > Take mne zarazilo, proc to na tom linuxu neprojde, kdyz se typove > parametry odmazavaji. Jo to pripadne JRE bug? > > > 2010/8/10 "Zdeněk Troníček" <[email protected]>: >> Ahoj, >> >> vzdyt tam mas pretypovani na List<?>. Tak si nejsem jisty, jak jsi to >> myslel. Jinak cyklus >> >> for (Employee e : list) { >> ... >> } >> >> bude pred prekladem (ve fazi desuggaring) nahrazen cyklem >> >> for (Iterator<Employee> i = list.iterator(); i.hasNext(); ) { >> Employee e = i.next(); >> ... >> } >> >> Tedy cyklus >> >> for (Object o : list) { >> ... >> } >> >> kde list je typu List<Employee> bude nahrazen cyklem >> >> for (Iterator<Employee> i = list.iterator(); i.hasNext(); ) { >> Object o = i.next(); >> ... >> } >> >> Po odmazani typovych parametru: >> >> for (Iterator i = list.iterator(); i.hasNext(); ) { >> Object o = i.next(); >> ... >> } >> >> Takze podle meho nazoru by to volani melo projit. >> >> Z. >> -- >> Zdenek Tronicek >> FIT CTU in Prague >> >> >> Ondra Medek napsal(a): >>> Ahoj, >>> >>> mam metodu >>> >>> protected void process(List<Employee> list) { >>> // ... >>> >>> for (Object object : (List<?>)list) { >>> @SuppressWarnings("unchecked") >>> Map<String, Object> map = (Map<String, Object>)object; >>> // ... >>> } >>> } >>> >>> ovsem za parametr list je misto List<Employee> pouzivan List<HashMap>. >>> Ano, je to prasarna, ale to je ted vedlejsi. >>> >>> na stroji WinXP s >>> java version "1.6.0_18" >>> Java(TM) SE Runtime Environment (build 1.6.0_18-b07) >>> Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing) >>> >>> to projde, kdezto na Linuxu se stejnou Javou: >>> java version "1.6.0_18" >>> Java(TM) SE Runtime Environment (build 1.6.0_18-b07) >>> Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode) >>> >>> to vyhodi >>> >>> java.lang.ClassCastException: java.util.HashMap cannot be cast to >>> cz.prins.tiger.db.Employee >>> >>> Jen by mne zajimalo, ktere chovani je dobre? BTW. kdyz ten list >>> pretypuju na List<?>, tak to dopadne dobre vsude. >>> >>> >>> -- >>> Ondra Medek >>> >> >> > > > > -- > Ondra Medek >
