Java Compilation ?? Min et Max ?

Java Compilation ?? Min et Max ? - Java - Programmation

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  
 

Code :
  1. public void myMethod1() {
  2.   int a,b;
  3.   .... code qui va affecter a et b
  4.   int mini = a<b?a:b;
  5.   ... faire ce qu'on veut avec mini
  6. }


plutôt que :
 

Code :
  1. public void myMethod2() {
  2.   int a,b;
  3.   .... code qui va affecter a et b
  4.   int mini = Math.min(a,b);
  5.   ... faire ce qu'on veut avec mini
  6. }


 
Apparement MyMethod1 serait plus rapide à l'execution.
Je sais qu'en C, ce genre d'argument tient, mais ça marche toujours en java ?

Reply

Marsh Posté le 19-10-2004 à 15:47:38   

Reply

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

Reply

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)


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 19-10-2004 à 16:18:43    

Eviter les postes inutiles  
ça pollue le forum pour rien

Reply

Marsh Posté le 19-10-2004 à 16:19:46    

axk47 a écrit :

Eviter les postes inutiles  
 


 
Bah pourquoi tu poste alors ?


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

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 ?

Reply

Marsh Posté le 19-10-2004 à 16:20:42    

axk47 a écrit :

Eviter les postes inutiles  
ça pollue le forum pour rien


 
On voudrait savoir à qui tu causes ?

Reply

Marsh Posté le 19-10-2004 à 16:21:03    

Faut faire une injection de bytecode en RT.


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 19-10-2004 à 16:21:40    

The Flint a écrit :


Qu'en pensez vous ?


Que tu devrais pouvoir tester ça facilement et qu'on attend tes résultats!:o


Message édité par skeye le 19-10-2004 à 16:21:55

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 19-10-2004 à 16:21:47    

chrisbk a écrit :

Faut faire une injection de bytecode en RT.


 
Hein ???

Reply

Marsh Posté le 19-10-2004 à 16:21:47   

Reply

Marsh Posté le 19-10-2004 à 16:25:08    

The Flint a écrit :


Qu'en pensez vous ?


 
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.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 19-10-2004 à 16:25:37    

chrisbk a écrit :

Faut faire une injection de bytecode en RT.


 
crisse :love:


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 19-10-2004 à 16:27:09    

2


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 19-10-2004 à 16:30:32    

3 :bounce:

Reply

Marsh Posté le 19-10-2004 à 16:30:57    


 
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 :
  1. fload variable1
  2. fload variable2
  3. jmp_ge label:
  4. fload variable2
  5. jmp label2:
  6. fload variable1;
  7. label2:


 
 
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


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 19-10-2004 à 16:33:03    


 
trois
 
 
 
J'ai gagné :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

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


---------------
NP: HTTP Error 764 Stupid coder found
Reply

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 .

Reply

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.
 


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

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


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 19-10-2004 à 16:43:17    

Il me semble pourtant que tu racontais le contraire quelques posts plus tôt ???

Reply

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


---------------
NP: HTTP Error 764 Stupid coder found
Reply

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é.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

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.

Reply

Marsh Posté le 19-10-2004 à 16:53:41    

jette lui des cailloux


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh 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 [:spamafote]


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

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 [:spamafote]


 
Je cherche à le convaincre, pas à se qu'on se tape sur la gueule...

Reply

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)


Message édité par kadreg le 19-10-2004 à 16:57:34

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

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...:o


Message édité par skeye le 19-10-2004 à 16:58:05

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 19-10-2004 à 17:01:06    

Vous n'êtes pas très encourageants.

Reply

Marsh Posté le 19-10-2004 à 17:01:40    

c'est parce qu'on a de l'experience [:franck75]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 19-10-2004 à 17:02:08    

the real moins moins a écrit :

c'est parce qu'on a de l'experience [:franck75]


 
Et une grosse bite  [:franck75]
 
(enfin, surtout moi)


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

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...[:dawa]


---------------
Can't buy what I want because it's free -
Reply

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...[:dawa]


 
C'est marrant mais là, je trouve l'exemple très parlant  :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed