Title: RE: classe final/performance

Pour info, issu d'un Article de Sun sur HotSpot :

http://developer.java.sun.com/developer/technicalArticles/Networking/HotSpot/inlining.html

...

In the past, programmers often inserted the "final" keyword for exactly
this reason. Or to better facilitate inlining and increase execution
speed, they would combine many smaller methods into one larger method.
But in many ways, such techniques defeat the entire facility of
modularization and reusability built into the programming language.

Unlike traditional virtual machines, the Java HotSpot VM is able to inline
the class without the "final" keyword:

class B {
int foo() { return 3; }
 }

...

Et � propos des probl�mes dans le cas o� on red�finit
la m�thode dans une sous-classe :

Such problem areas are detected by recording for every compilation,
all of the assumptions that the code makes. On every class load, all
these assumptions are checked and, if violated, the now-incorrect
compiled code is retired (deoptimized). 


Ca m'a l'air bien compliqu�, mais il ont l'air surs d'eux. :o)

Olivier


> -----Message d'origine-----
> De : Remi Forax [mailto:[EMAIL PROTECTED]]
> Envoy� : mercredi 12 juin 2002 15:44
> � : [EMAIL PROTECTED]
> Objet : Re: classe final/performance
>
>
> Pierre-Fran�ois Lemosquet wrote:
> >
> >
> >>
> >> Non, pas de diff�rence.
> >> Heu, quand tu parle de compilo, tu veux parler de Javac ou
> d'un JIT.
> >> Le compilo (javac) ne fait aucune optimisation !!!
> >> Seul le JIT fait de l'inlining parce qu'il est seul apte � savoir
> >> ce que l'on execute souvent et qui donc doit �tre inlin�.
> >>
> > Je pensais que javac effectuait des optimisations (inlining
> et autres)
> > Je ne vois pas en quoi il en serait incapable (des setter
> ou des getter
> > sont des methodes  naturellement canditates au inlining non??? pas
> > besoin de le detecter
> > � l'ex�cution).
>
> Il pourrait effectivement le faire sous certaine condition, il faut
> faire attention � la s�curit�. Par exemple, Le compilo
> ne peux faire de l'inlining sur un getter publique utilisant une
> variable priv�e si le getter est appel� � l'ext�rieur de la classe.
>
> Par contre, la VM � la droit car elle v�rifie la s�curit�
> (enfin, ce type de s�curit�) lors du chargement du byte-code
> (�tape de v�rification) et donc elle est en mesure de faire
> de l'inlining apr�s.
>
> Remi
>

Répondre à