Java Compilation ?? Min et Max ? - Java - Programmation
Marsh Posté le 19-10-2004 à 16:11:59
ben... j'en sais rien mais ca me parait pas tres compliqué de faire un benchmark
Marsh Posté le 19-10-2004 à 16:14:43
Pure branlette. Si tu as de telles contraintes de vitesse, OK, si c'est juste pour faire le code le plus buggé possible car tu passes ton temps à réinventer la roue (et de préférence mal)
Marsh Posté le 19-10-2004 à 16:19:46
axk47 a écrit : Eviter les postes inutiles |
Bah pourquoi tu poste alors ?
Marsh Posté le 19-10-2004 à 16:19:56
kadreg a écrit : Pure branlette. Si tu as de telles contraintes de vitesse, OK, si c'est juste pour faire le code le plus buggé possible car tu passes ton temps à réinventer la roue (et de préférence mal) |
Je suis d'accord, mais comme c'est l'argument qui est avancé (la vitesse d'execution) j'aimerai savoir si il est un tant soit peu valable, ou c'est c'est du pipeau.
En gros, on se dit ok : dans le premier cas, après avoir précopilé, tout le code est dans mon fichier .class, et donc, à l'execution, pas besoin d'aller chercher du code dans une autre classe comme c'est le cas dans la deuxieme méthode.
Qu'en pensez vous ?
Marsh Posté le 19-10-2004 à 16:20:42
axk47 a écrit : Eviter les postes inutiles |
On voudrait savoir à qui tu causes ?
Marsh Posté le 19-10-2004 à 16:21:03
Faut faire une injection de bytecode en RT.
Marsh Posté le 19-10-2004 à 16:21:40
The Flint a écrit : |
Que tu devrais pouvoir tester ça facilement et qu'on attend tes résultats!
Marsh Posté le 19-10-2004 à 16:21:47
ReplyMarsh Posté le 19-10-2004 à 16:25:08
The Flint a écrit : |
Que le classLoader garde en mémoire les classes chargées, ainsi que la table des opérations. Effectivement, il y a un appel de méthode supplémentaire, mais c'est une méthode statique, donc c'est pas couteux car il y a pas le méca de réso auto des surcharge.
Marsh Posté le 19-10-2004 à 16:25:37
chrisbk a écrit : Faut faire une injection de bytecode en RT. |
crisse
Marsh Posté le 19-10-2004 à 16:27:09
The Flint a écrit : Hein ??? |
2
Marsh Posté le 19-10-2004 à 16:30:57
The Flint a écrit : Hein ??? |
Simple
Avant de charger un .class, tu examines le bytecode a la recherche d'un appel a Math.min(). Tu regardes un peu en arriere les deux parametres balancé sur la pile, tu vire les deux push des appels et le call, et tu remplaces ca par un truc genre :
Code :
|
Et hop, tu sauvegardes et tu redirige le chargement de la classe sur ton BC ainsi modifié. Gaffe que les constantes/variables locales/membres/statique se balancent pas sur la pile de la meme maniere.
Sinon c'est aussi simple que cela. De l'inling fait main pour JVM poussive. Tu peux meme l'adapter au type et tout. La classe
Marsh Posté le 19-10-2004 à 16:33:03
trois
J'ai gagné
Marsh Posté le 19-10-2004 à 16:34:48
Citation : Que le classLoader garde en mémoire les classes chargées, ainsi que la table des opérations. Effectivement, il y a un appel de méthode supplémentaire, mais c'est une méthode statique, donc c'est pas couteux car il y a pas le méca de réso auto des surcharge. |
Mon pauvre kadreg, tu vieillis. Deja la resolution de surcharge, foutaise. Une surcharge ca se choisi a la compilation, donc bon. Je suppose que tu voulais dire de fonctions redefinies, celle qu'on appeleraient virtuelle dans un bon C++ des familles, et la, la v-table debarque.
Donc en gros en faisant un appel sur une fonction statique plutot que sur une fonction normale, on evite:
le push du this
le saut indirect de la v-table (soit en gros sur intel : mov eax,this; [add eax, [dep-vtable]]; mov eax, [eax]; call [eax+idFonction]), au lieu d'un appel direct (call maFonction). ce qui est généralement assez negligeable
Marsh Posté le 19-10-2004 à 16:37:04
gnark, c'est bon à savoir mais je n'en demandais pas tant, tout ce que je voulais savoir c'était si mon pote avait raison de refaire son min à chaque fois plutôt que d'appeler Math.min .
Marsh Posté le 19-10-2004 à 16:37:19
chrisbk a écrit : Mon pauvre kadreg, tu vieillis. Deja la resolution de surcharge, foutaise. Une surcharge ca se choisi a la compilation, donc bon. Je suppose que tu voulais dire de fonctions redefinies, celle qu'on appeleraient virtuelle dans un bon C++ des familles, et la, la v-table debarque. |
J'ai oublié le nom de ce truc là, ouais.
Marsh Posté le 19-10-2004 à 16:38:35
The Flint a écrit : gnark, c'est bon à savoir mais je n'en demandais pas tant, tout ce que je voulais savoir c'était si mon pote avait raison de refaire son min à chaque fois plutôt que d'appeler Math.min . |
Non, il a tord, ca rend son code tout moche, cracra, beurk, et tout ca pour rien
Marsh Posté le 19-10-2004 à 16:43:17
Il me semble pourtant que tu racontais le contraire quelques posts plus tôt ???
Marsh Posté le 19-10-2004 à 16:44:35
en fait la vérité, c'est que bon, pour un min je crois bien que je m'en fous, mes ascendant C de la vieille epoque me pousserait a faire de l'inlining (methode de ton pote), mais la flemme moderne me pousserait a faire Math.roger
alors bon
Marsh Posté le 19-10-2004 à 16:44:49
The Flint a écrit : Il me semble pourtant que tu racontais le contraire quelques posts plus tôt ??? |
Il disait que le gain est tellement minime que ça vaut pas le cout d'augmenter la complexité du code, et donc diminuer sa maintenabilité.
Marsh Posté le 19-10-2004 à 16:48:31
Bon, ok. Je vais lui dire ça, mais comme c'est plutôt un vieux de la vieille du C++ et du C, il va m'envoyer chier.
Marsh Posté le 19-10-2004 à 16:53:41
ReplyMarsh Posté le 19-10-2004 à 16:53:55
The Flint a écrit : Bon, ok. Je vais lui dire ça, mais comme c'est plutôt un vieux de la vieille du C++ et du C, il va m'envoyer chier. |
Dit lui que c'est un dino inadapté aux technologies du génie logiciel moderne
Marsh Posté le 19-10-2004 à 16:55:11
kadreg a écrit : Dit lui que c'est un dino inadapté aux technologies du génie logiciel moderne |
Je cherche à le convaincre, pas à se qu'on se tape sur la gueule...
Marsh Posté le 19-10-2004 à 16:57:05
The Flint a écrit : Je cherche à le convaincre, pas à se qu'on se tape sur la gueule... |
spareil
(kad, consultant méthodes et process logiciels à la pelle à clous)
Marsh Posté le 19-10-2004 à 16:57:59
The Flint a écrit : Je cherche à le convaincre, pas à se qu'on se tape sur la gueule... |
convaincre un adepte du C c'est comme parler à un mur...
Marsh Posté le 19-10-2004 à 17:01:40
c'est parce qu'on a de l'experience
Marsh Posté le 19-10-2004 à 17:02:08
the real moins moins a écrit : c'est parce qu'on a de l'experience |
Et une grosse bite
(enfin, surtout moi)
Marsh Posté le 19-10-2004 à 17:02:44
The Flint a écrit : Vous n'êtes pas très encourageants. |
Quand tu te seras tapé quelques scripts pl/sql à la con juste parce-que ton chef veut pas reconnaitre qu'il y a plus pratique pour faire la même chose, tu comprendras...
Marsh Posté le 19-10-2004 à 17:08:21
skeye a écrit : Quand tu te seras tapé quelques scripts pl/sql à la con juste parce-que ton chef veut pas reconnaitre qu'il y a plus pratique pour faire la même chose, tu comprendras... |
C'est marrant mais là, je trouve l'exemple très parlant
Marsh Posté le 19-10-2004 à 15:47:38
Oula la, excusez moi j'ai un gros dilemme là, un pote vient de me dire
qu'il valait mieux recoder min et max "in line" au lieu d'utiliser java.lang.Math :
du genre
plutôt que :
Apparement MyMethod1 serait plus rapide à l'execution.
Je sais qu'en C, ce genre d'argument tient, mais ça marche toujours en java ?