Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2074 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Les meilleurs perfs pour Java : compilation code natif, -O, -server ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Les meilleurs perfs pour Java : compilation code natif, -O, -server ?

n°1283935
sam69
va bien !
Posté le 15-01-2006 à 14:04:01  profilanswer
 

Bonjour,
En cherchant à optimiser un programme (de calcul) en java. J'ai trouvé des liens très interressants :
 
Le premier explique comment optimiser son code : (rigolez pas sur la tête du gars, il travaille chez ibm ;-)
http://www.club-java.com/Public/Ja [...] imiser.htm
EDIT : La plupart de ses optimisations sont pipos. Sauf L'utilisation de StringBuffer !
 
Et l'autre fait une comparaison des différents mode d'exécution de programme java, (en code natif, en mode client, en mode server etc..)
http://blog.developpez.com/index.p [...] 1#more1389
EDIT : le mode "Interpreter" (que l'on obtient désormais lorsqu'on utilise l'option -Xint de Java) correspond à un mode où le bytecode est entièrement interprété sans aucune compilation natif. C'est à peu près le fonctionnement des JVM antérieur à la version 1.2 (soit avant 1998)...  
 
EDIT : Une méthode très efficace pour optimiser les perfs : regler le garbage collector correctement :
http://fivedots.coe.psu.ac.th/~ad/jg/appC/AppC.pdf
 
De même, en compilant avec javac -O, il est possible d'optimiser son code (méthode inline etc..). Ca sert vraiment à quelque chose ? Pourquoi cette option n'est pas par défaut ?
EDIT : Cette option n'est plus d'aucune utilité désormais, elle n'est plus dans la documentation de javac, bien que cela ne provoque aucune erreur lorsqu'on l'utilise (pour des raisons de compatibilité). La plupart des optimisations sont effectuées lors de l'exécution.  
 

Message cité 1 fois
Message édité par sam69 le 15-01-2006 à 21:27:27
mood
Publicité
Posté le 15-01-2006 à 14:04:01  profilanswer
 

n°1283999
sam69
va bien !
Posté le 15-01-2006 à 15:53:42  profilanswer
 

Un petit up pour que les experts java puissent lire ce message !
Je sais, on est dimanche donc je suis patient ;-)

n°1284029
nraynaud
lol
Posté le 15-01-2006 à 17:04:51  profilanswer
 

sam69 a écrit :


Le premier explique comment optimiser son code : (rigolez pas sur la tête du gars, il travaille chez ibm ;-)
http://www.club-java.com/Public/Ja [...] imiser.htm


[:rofl]
il doit travailler au marketting ou à la comptabilité alors.
 
nan mais sérieusement, c'est n'importe quoi.

n°1284049
sircam
I Like Trains
Posté le 15-01-2006 à 17:33:03  profilanswer
 

Allez, donne au moins un deux exemples pour appuyer ton propos. [:pingouino]
 


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1284068
sam69
va bien !
Posté le 15-01-2006 à 18:05:15  profilanswer
 

nraynaud a écrit :

[:rofl]
il doit travailler au marketting ou à la comptabilité alors.
 
nan mais sérieusement, c'est n'importe quoi.


 
Bah, il a une sale tronche ok, mais son article est très interressant ! Il donne des exemples concrets d'optimisation de code java.

n°1284069
trevor
laissez la vie vous étonner...
Posté le 15-01-2006 à 18:06:15  profilanswer
 

nraynaud a écrit :

[:rofl]
il doit travailler au marketting ou à la comptabilité alors.
 
nan mais sérieusement, c'est n'importe quoi.


 
j'ai parcourcu un petit peu le lien. ce qu'il y a dedans ne me parait pas idiot, mais avoir d'autres avis, ca m'intéresse aussi, je suis preneur :)


---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
n°1284074
sam69
va bien !
Posté le 15-01-2006 à 18:10:56  profilanswer
 

sircam a écrit :

Allez, donne au moins un deux exemples pour appuyer ton propos. [:pingouino]


 
C'est pas des propos que je donne, ce sont des questions. A ceux qui ont déjà éxecuté des programmes java en mode server, qui permet d'optimiser la vitesse de programmes java en fonction de la machine cible.
Un exemple tiré du deuxième lien :  
 

Code :
  1. for (int i=0; i<max; i++) {
  2.     integer = new Integer(i);
  3. }


 
Java Interpreter 36,750 s
Java 5.0 Server 1,265 s
GCJ 3.4.4 -O3 18,937 s
 
Cela veut dire que ce programme met 36 secondes à s'exécuter en mode normal, alors qu'en mode server avec le jdk 1.5, il ne met que 1 s !!
 
Merci d'avance à ceux qui pourrons m'expliquer comment executer un programme en mode server  :jap:

n°1284081
nraynaud
lol
Posté le 15-01-2006 à 18:21:35  profilanswer
 

http://java.sun.com/j2se/1.4.2/doc [...] javac.html
vous en voyez beaucoup des -O ?
 
réutiliser les instance -> dans la plupart des cas, le code pour gérer le pool est plus lent qu'un constructeur (j'ai plus l'article sous la main)
 
 
les histoires de dispatching (static, final etc.) -> ça se fait tout seul à la compil, élimination des expressions comunes pareil (mais c'est bien de le faire quand même), l'histoire des boucles à l'envers : pipo, si elle le veut, la JVM se démerdera (mais y'a sûrement pas de mot d'état dans la JVM). Les histoires de remplacement de /2 par >> d'une part la JVM le fait, d'autre part, le proc peut le faire.
 
etc. etc.
 
les perfs ça s'améliore par les algorithmes, pas par de la bidouille.

n°1284083
nraynaud
lol
Posté le 15-01-2006 à 18:22:54  profilanswer
 

sam69 a écrit :

C'est pas des propos que je donne, ce sont des questions. A ceux qui ont déjà éxecuté des programmes java en mode server, qui permet d'optimiser la vitesse de programmes java en fonction de la machine cible.
Un exemple tiré du deuxième lien :  
 

Code :
  1. for (int i=0; i<max; i++) {
  2.     integer = new Integer(i);
  3. }


 
Java Interpreter 36,750 s
Java 5.0 Server 1,265 s
GCJ 3.4.4 -O3 18,937 s
 
Cela veut dire que ce programme met 36 secondes à s'exécuter en mode normal, alors qu'en mode server avec le jdk 1.5, il ne met que 1 s !!
 
Merci d'avance à ceux qui pourrons m'expliquer comment executer un programme en mode server  :jap:


normalement, c'est -server.
 
en mode server, il compile tout agressivement, alors qu'en mode client il évite pour pas que d'un e part l'utilisateur attende trop et d'autre paart parce que les profils de charge peuvent changer très vite.

n°1284092
sam69
va bien !
Posté le 15-01-2006 à 18:42:07  profilanswer
 

nraynaud a écrit :

http://java.sun.com/j2se/1.4.2/doc [...] javac.html
vous en voyez beaucoup des -O ?
 
réutiliser les instance -> dans la plupart des cas, le code pour gérer le pool est plus lent qu'un constructeur (j'ai plus l'article sous la main)
 
 
les histoires de dispatching (static, final etc.) -> ça se fait tout seul à la compil, élimination des expressions comunes pareil (mais c'est bien de le faire quand même), l'histoire des boucles à l'envers : pipo, si elle le veut, la JVM se démerdera (mais y'a sûrement pas de mot d'état dans la JVM). Les histoires de remplacement de /2 par >> d'une part la JVM le fait, d'autre part, le proc peut le faire.
 
etc. etc.
 
les perfs ça s'améliore par les algorithmes, pas par de la bidouille.


 
Bon, peut-être que tout n'est pas bon à prendre dans cet article, car c'est bien vrai que certaines bidouilles ne doivent pas changer grand chose, excepté de rendre le code illisible  :D  
 
Sinon, je pense que l'option -server est plus interressante dans mon cas. Je viens de trouver comment lancer un programme en passant l'argument -server à la machine virtuelle :  
Dans Eclipse, Run...->Arguments->VM Arguments : ajouter -server
 
Si vous avez l'erreur Error: no `server' JVM at `C:\Program Files\Java\jre1.5.0_06\bin\server\jvm.dll, il faut copier le répertoire bin\server qui doit se trouver dans le jdk (oui je sais, j'avais installé le jre avant le jdk..)
 
Il faut que je fasse des tests pour voir les changements !! Car dans mon cas, c'est un programme qui fait des calculs brut (et souvent les mêmes) donc je pense que ca va aider ;-)


Message édité par sam69 le 15-01-2006 à 18:48:58
mood
Publicité
Posté le 15-01-2006 à 18:42:07  profilanswer
 

n°1284093
red factio​n
Posté le 15-01-2006 à 18:42:40  profilanswer
 

Ce qui me fait souvent rire qd on voit des bench java ou on voit des langages compilés (ex: C) se faire depassé par ce dernier (soit disant parce que l'interpreteur sait sur quel cpu il execute, ce qui n'est pa le cas dans un langage compilé)
 
quoi qu'on puisse dire pour moi Java ne sera jamais qu'un emulateur optimisé :o

n°1284096
sam69
va bien !
Posté le 15-01-2006 à 18:50:35  profilanswer
 

On va pas partir sur le débat "java c'est lent, programmez en c++" please !

n°1284099
nraynaud
lol
Posté le 15-01-2006 à 18:57:44  profilanswer
 

red faction a écrit :

(soit disant parce que l'interpreteur sait sur quel cpu il execute, ce qui n'est pa le cas dans un langage compilé)


ben celui qui t'a dit ça, il t'a bourré le mou.

n°1284117
sircam
I Like Trains
Posté le 15-01-2006 à 20:01:09  profilanswer
 

Citation :

C'est pas des propos que je donne, ce sont des questions.


"Allez, donne au moins un deux exemples pour appuyer ton propos" ne t'était pas adressé.

Citation :

vous en voyez beaucoup des -O ?


OK.

Citation :

réutiliser les instance -> dans la plupart des cas, le code pour gérer le pool est plus lent qu'un constructeur


OK; somme toute "logique".

Citation :

les histoires de dispatching (static, final etc.) -> ça se fait tout seul à la compil, élimination des expressions comunes pareil


OK

Citation :

l'histoire des boucles à l'envers : pipo


Tu l'as dit!

Citation :

Les histoires de remplacement de /2 par >>


Non mais là, carrément. Bloch et Gafter doivent trouver ce genre de pseudo-optimisations bien marrantes. Ils ont d'ailleurs fait un clin d'oeil à cette soi-disant optimisation lors de leur "puzzlers" à Javapolis, cela dit en passant.

Citation :

les perfs ça s'améliore par les algorithmes, pas par de la bidouille.


+1 : Tout ça, ce sont des micro-optimisations tout droit venue du C et qui n'ont plus vraiment leur place au sein d'une machine virtuelle moderne.

Citation :

quoi qu'on puisse dire pour moi Java ne sera jamais qu'un emulateur optimisé


Non mais ninwak ! :o


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1284122
trevor
laissez la vie vous étonner...
Posté le 15-01-2006 à 20:07:56  profilanswer
 

ok. bon aux vues des commentaires des connaisseurs, je vire le lien "optimisez java" de mes signets! :)


---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
n°1284142
nraynaud
lol
Posté le 15-01-2006 à 20:23:32  profilanswer
 

sircam a écrit :


Citation :

quoi qu'on puisse dire pour moi Java ne sera jamais qu'un emulateur optimisé


Non mais ninwak ! :o


bof non, c'est vrai.

n°1284153
sircam
I Like Trains
Posté le 15-01-2006 à 20:37:02  profilanswer
 

Faudra que vous me donniez votre définition du mot émulateur alors. [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1284157
nraynaud
lol
Posté le 15-01-2006 à 20:45:14  profilanswer
 

ça émule une JVM :o

n°1284159
the real m​oins moins
Posté le 15-01-2006 à 20:50:47  profilanswer
 

ha sircam, t'etais à javapolis ? :D


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1284161
red factio​n
Posté le 15-01-2006 à 20:52:09  profilanswer
 

programme qui (en temps reel) interprete du bytecode et le traduit en langague machine (et qui forcement est plus lent que si le code avec ete executé directement par le proco)
 
 

n°1284167
nraynaud
lol
Posté le 15-01-2006 à 20:58:40  profilanswer
 

red faction a écrit :

programme qui (en temps reel) interprete du bytecode et le traduit en langague machine (et qui forcement est plus lent que si le code avec ete executé directement par le proco)


1) c'est pas en temps réel
2) ça lui permet de changer de stratégie de compilation si la stratéie initiale n'était pas efficace
3) ça lui donne une visibilité plus fine qu'un compilateur statique.
 
y'as des arguments contre, mais je compte sur toi pour aller les trouver.

n°1284168
red factio​n
Posté le 15-01-2006 à 21:04:29  profilanswer
 

qd j'ai mit "en temps reel" je voulais simplement dire que ce n'etait pas un simple utilitaire qui prenait un fichier binaire en entree et recrachait un .exe en sortie  
 
bien evidement que java ne fait pas ca pour chaque opcode (et c la meme chose pour certains emu )

n°1284169
nraynaud
lol
Posté le 15-01-2006 à 21:05:42  profilanswer
 

oui mais c'est là que ça change tout par rapport à : "et qui est forcément plus lent"

n°1284173
red factio​n
Posté le 15-01-2006 à 21:08:33  profilanswer
 

ok grace a la compilation dynamique je peux comprendre que l'on puisse obtenir des performances semblables, mais Alors il faudrait mexpliquer pq NetBeans par exemple rame exagérement par rapport a d'autre IDE, alors que il est ecrit lui aussi en Java
(si jte parle de NetBeans c'est parce que c'est un des seul soft que j'ai eu reelement a utliser en Java a fond)
 
et pq ne fait on pas tout les jeux en Java alors s'il est si peu gourmand ?

Message cité 1 fois
Message édité par red faction le 15-01-2006 à 21:12:16
n°1284177
nraynaud
lol
Posté le 15-01-2006 à 21:13:26  profilanswer
 

red faction a écrit :

ok grace a la compilation dynamique je peut comprendre que l'on puisse obtenir des performances semblables, mais Alors il faudrait mexpliquer pq NetBeans par exemple rame exagérement par rapport a d'autre IDE, alors que il est ecrit lui aussi en Java
 
 
et pq ne fait on pas tout les jeux en Java alors s'il est si peu gourmand ?


1) y'a de la merde partout, et java semble particulièrement attirer les merdeux
 
 
2) deux point :
- java n'a pas une bonne image
- le GC (actuel) ne permet pas de s'approcher facilement du temps réel. Et développer des JVM spécifique est compliqué et manque de marché.
 

n°1284178
sircam
I Like Trains
Posté le 15-01-2006 à 21:15:22  profilanswer
 

the real moins moins a écrit :

ha sircam, t'etais à javapolis ? :D


Ouaip, par intermitence. Je pense pas que j'y retournerai l'année prochaine : Java commence à avoir un goût de legacy à Javapolis. Pas mal de choses qui se répètent finalement.    [:pingouino]
 
Et surtout, leurs affiches deviennent d'un goût trop douteux. [:dawa]
 
Par contre, les puzzlers, miam.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1284182
sam69
va bien !
Posté le 15-01-2006 à 21:21:40  profilanswer
 

Merci beaucoup à tous pour vos réponses !
J'ai trouvé d'autres informations/désinformation : Je met à jour mon premier poste.

n°1284291
phnatomass
Je m'empare de ton esprit !!
Posté le 16-01-2006 à 09:25:58  profilanswer
 

Je tiendrais juste à prendre la défense de l'auteur.
C'est un article qui date d'au moins 99/2000 si mes souvenirs sont exacts.
Les compilateurs et jre java ont extrement progessés depuis le jdk1.2.
Certaine optimisations n'ont plus lieu d'être aujourd'hui mais pourtant à l'époque la réutilisation d'instance était un gain substantielle, de même qu'avec de simple bench on constatait la difference réelle qu'il y avait entre appels de methodes static et methodes non static.

n°1284292
sircam
I Like Trains
Posté le 16-01-2006 à 09:27:28  profilanswer
 

Remarque constructive et fondée.
 
L'auteur pourrait au moins mettre un cachet "deprecated" sur l'article.
 
[:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1284310
nraynaud
lol
Posté le 16-01-2006 à 10:09:18  profilanswer
 

phnatomass a écrit :

Je tiendrais juste à prendre la défense de l'auteur.
C'est un article qui date d'au moins 99/2000 si mes souvenirs sont exacts.
Les compilateurs et jre java ont extrement progessés depuis le jdk1.2.
Certaine optimisations n'ont plus lieu d'être aujourd'hui mais pourtant à l'époque la réutilisation d'instance était un gain substantielle, de même qu'avec de simple bench on constatait la difference réelle qu'il y avait entre appels de methodes static et methodes non static.


tu veux dire en 96-97 non ?

n°1284313
masklinn
í dag viðrar vel til loftárása
Posté le 16-01-2006 à 10:15:34  profilanswer
 

nraynaud a écrit :

ça émule une JVM :o


Ca émule une machine physique [:aloy]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1284314
nraynaud
lol
Posté le 16-01-2006 à 10:16:02  profilanswer
 

te doutes façon, emule c'est le piratage et c'est mal :o


Message édité par nraynaud le 16-01-2006 à 10:16:09
n°1284340
phnatomass
Je m'empare de ton esprit !!
Posté le 16-01-2006 à 10:57:34  profilanswer
 

nraynaud a écrit :

tu veux dire en 96-97 non ?


Ecris à l'auteur si tu souhaites savoir quand il a pondu son article, mais en jdk1.2 (donc 99-2000) la plupart de ses tips étaient valables.

n°1284380
_guigui_
Posté le 16-01-2006 à 12:17:39  profilanswer
 

nraynaud a écrit :

les perfs ça s'améliore par les algorithmes, pas par de la bidouille.


 
certes... mais une fois que l'algorithme a été optimisé, il faut se pencher sur la configuration de la JVM, et ce n'est pas de la bidouille. Changer de garbage collector sur un quadri processeur c'est obligatoire par exemple, j'appelle pas ca de la bidouille...

n°1284384
nraynaud
lol
Posté le 16-01-2006 à 12:23:24  profilanswer
 

_guigui_ a écrit :

certes... mais une fois que l'algorithme a été optimisé, il faut se pencher sur la configuration de la JVM, et ce n'est pas de la bidouille. Changer de garbage collector sur un quadri processeur c'est obligatoire par exemple, j'appelle pas ca de la bidouille...


ouais, bah déjà, que l'algo soit optimisé hein.
 
Parce que pour l'instant, j'attends encore d'en voir du code optimisé.
 
 
parce que les mecs qui me gonflent avec ses >> alors qu'il a jamais vu un profiler de sa vie, ça va 5 min.

n°1284429
sircam
I Like Trains
Posté le 16-01-2006 à 13:06:55  profilanswer
 

nraynaud pète la forme en 2006.
 
[:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1284433
nraynaud
lol
Posté le 16-01-2006 à 13:11:22  profilanswer
 

Yeah man ! BRETELLES attitude man !

n°1356843
Chronoklaz​m
Posté le 30-04-2006 à 19:17:50  profilanswer
 

Yo,
 
   Désolé pour le ce up de l'enfer mais je suis dans les optis la et j'aimerais des avis de votre part. J'ai un peu la flemme de faire du javap ....  
 

Code :
  1. for (int j = 1; j <= this.numberOfColumns; j++) {
  2.             sum_field += (r[j] * r[j]); //sum_field = sum_field + (r[j] * r[j]);   <---  ca sert ou pas ?
  3. }

 
 

Code :
  1. int j, k, temp; <-------------- le k etait déclaré a chaque iteration de la premiere boucle
  2.         double sum;
  3.         for (j = 1; j <= this.numberOfRows; j++) {
  4.             sum = 0.0d; //double sum = 0.; <------------------------------- ca sert ou pas ?
  5.             temp = (rowstr[j + 1] - 1); // added    <------------------------ ca sert ou pas de le sortir du test de la boucle ?
  6.             for (k = rowstr[j]; k <= temp; k++) {
  7.                 sum += (a[k] * p[colidx[k]]);// sum = sum + (a[k] * p[colidx[k]]);
  8.             }
  9.             w[j] = sum;
  10.         }


 
double sum = 0.0;   // le passer en   0.0d   ?
 
C'est des petits trucs mais bon  on sait jamais ...


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1356857
nraynaud
lol
Posté le 30-04-2006 à 19:45:44  profilanswer
 

c'est inutile.  
 
par contre, fais gaffe que dans le premier cas, si sum>>r[j] * r[j]
et dans le second, si sum >> (a[k] * p[colidx[k]]) alors tu perds de la précision à chaque tour de boucle.


Message édité par nraynaud le 30-04-2006 à 19:46:34
n°1360036
oliviermdv​y
Posté le 04-05-2006 à 21:51:41  profilanswer
 

Sinon pour être en mode serveur il faut remplir les conditions suivantes; avoir 2 CPU (ou un double coeur) et 2 giga de ram. Dans ce cas tu es automatiquement en mode serveur, hé bien moi j'y suis pas, il manque une dll, peut être devrais je réinstaller le JDK maintenant que j'ai un X2 ?

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Les meilleurs perfs pour Java : compilation code natif, -O, -server ?

 

Sujets relatifs
longueur max de code.Inet1.OpenURL ?[Java] Integer dans un Vector: utiliser valueOf() ou new ?
petit sondage : options de compilation avec gcc[Java] Process marche sous windows, pas sous linux
partir le code VBA d'un bouton d'un formulaire accessJava: Probleme de Cast
[Java 1.5] Process : afficher le flux de sortieDu flash dans mon code CSS
[Java] Extraire informations d'un cheminQuelle est l'interet d'étudier JAVA ou C++ ???
Plus de sujets relatifs à : Les meilleurs perfs pour Java : compilation code natif, -O, -server ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR