Stránka 1 z 1

Java - přetypování X datový typ int

Napsal: 20 led 2015 16:39
od Matiseli
Zdravím vás,
již delší dobu mi leží na srdci (resp. v mysli :D) jedna otázka. Ta se především opírá o skutečnost, že datový typ byte nezabírá tolik místa v java paměti - tudíš, pokud vím, že, ku příkladu, budu nyní jistou metodu používat pouze pro malá čísla, mám se vyhnout přetypování (breachmark odhalil, že de fakto žádná ztráta výkonu při něm nehrozí)? Čili, mám napsat

Kód: Vybrat vše

objekt.metoda(intProměnná);

či
objekt.metoda((byte)intProměnná)
?
Ač mi jde převážně o výkon a spotřebu RAM, chápu i filozofii "čistého kódu".
Jaký postup by jste mi doporučili? Mám vytvářet metody s parametrem byte, či s int (když si sem vědom, že s velkými čísly pracovat nebudu)?

Re: Java - přetypování X datový typ int

Napsal: 20 led 2015 17:16
od satik
Byte řeš jen, pokud se jedná o data v poli, jinak normálně int, nemá smysl se tímhle zabývat, vliv je buďto nulový nebo tak zanedbatelný, že je v podstatě neměřitelný.

Navíc byte může narušit zarovnání paměti, což ve výsledku může výkonově i uškodit (i když těžko říct, jak přesně je to u Javy :D ).

Re: Java - přetypování X datový typ int  Vyřešeno

Napsal: 20 led 2015 18:07
od faraon
Nevím jak to přesně dělá Java, ale třeba v Céčku se s typem char pracuje tak, že se nejdřív převede na int, a teprve potom provede příslušná činnost. Takže by to nakonec mohlo být ještě pomalejší než když tam plácneš jednoduše int.
Další otázka je již zmíněné zarovnání paměti, protože je velmi obvyklé že se proměnné ukládají na adresy dělitelné čtyřmi (u 64bitových strojů spíš osmi), tím pádem ti stejně zabere místo velké jako ten int nebo i větší.
Pokud to nemáš v poli nebo struktuře, nevyplatí se to.

Ono to přetypování by žádnou ztrátu výkonu ani způsobit nemělo, protože to je víceméně jenom poznámka pro překladač, která mu říká že tuhle hodnotu chceš opravdu použít tímhle způsobem, který by mohl dát chybný výsledek. Takže ti nevyhodí warning nebo error. Za běhu programu už tam nic takového neexistuje, prostě se rovnou provede to co jsi požadoval.