[Javalist] Segítség! Java7 compiler BUG???

István Székely istvan.szekely at i-logic.hu
2012. Júl. 25., Sze, 10:50:17 CEST


Sziasztok!

Péter, erről légy szíves mesélj, mert úgy érzem, lemaradtam valamiről.

A kivételkezelés Javaban is lassú (volt?). Ennek oka pontosan a stack 
trace összeállítása. A hívási lánc bejárása és a stack trace 
összeállítása igen drága művelet. Pont ebből az okból javasolja Joshua 
Bloch is, hogy kivételkezelést ne használjunk vezérlési szerkezetek 
helyett. Emiatt nem jó az sem, hogy az említett JPA metódus is kivételt 
dob null visszaadása helyett (persze emellett is lehet érvelni, és 
hajlamos is vagyok elfogadni, de az most más téma).

Ahonnan van: Effective Java, 2nd ed
Item 57: Use exceptions only for exceptional conditions

Üdv,
Stivi


On 2012-07-24 23:26, Peter Verhas wrote:
> Technológiai okok miatt C++ és C# (általánosan .NET) környezetben nem 
> szeretünk exception-t dobni (én magam programozni sem szeretek ezekben 
> a környezetekben, nem is tudok (nagyon), hát még kivételt dobni). 
> Ezekben a környezetekben a kivétel dobása drága, egészen más a 
> kivételek szerkezete, és ezért nem is ad megfelelő információt. 
> Tipikusan nincs benne a stack trace, ezért ha egy szinttel feljebb, 
> mint ahonnan dobták nem kapjuk el, akkor már nem is lehet tudni, hogy 
> honnan dobták. Akkor meg már olcsóbb futási időben a megfelelő hibakód 
> visszaadása, és ennek nagy hagyománya van unix C és Windows C 
> programozási környezetben, régen bevált. [Megjegyzés: ennek a 
> bekezdésnek az egyik fele nem első kézből való információ, csak 
> beszélgettem .NET-es kollégákkal. A másik fele viszont ezer évvel 
> ezelőtti C programozási emlékek megmaradt halvány foszlányai.]
>
> A Java egészen más. Java-ban az exception hordozza a stack trace-t 
> (vagy nem, de inkább igen, mint nem), és ebben nagyon sok szimbolikus 
> információ benne van. Nem kell ott elkapni, ahol dobják, vagy egy 
> szinttel feljebb, mert minden szükséges információ benne van, és ezért 
> elég ha ott kapjuk el, ahol kezelni tudjuk. Ezért lett egyébként 
> kitalálva a hiba dobás, és véleményem szerint a .NET környezet az 
> exception dobás, mint pattern funkcionalitásának egy részét feláldozta 
> a teljesítmény oltárán, amit viszont mostanra (Java6, 7) kezd 
> túlhaladni az idő.
>



További információk a(z) Javalist levelezőlistáról