System.out.println et optimisation

System.out.println et optimisation - Java - Programmation

Marsh Posté le 14-12-2004 à 11:13:47    

Voilà, j'ai fait une appli qui date de "il y a longtemps" et à cette époque je ne connaissais pas encore log4j et je me contentais de faire plein de "System.out.println" pour debugger mon appli.  
Maintenant je me retrouve avec une appli qui me sort en une journée plus de 5mo de texte dans le catalina.out (que des messages de debug).
 
A votre avis, en enlevant tout ces messages, mon appli sera mieux optimisé niveau temps d'execution ? En gros, ces sorties de textes ralentissent-ils mon appli ou sont négligables ?
 
Merci de votre aide  :jap:

Reply

Marsh Posté le 14-12-2004 à 11:13:47   

Reply

Marsh Posté le 14-12-2004 à 11:25:06    

Ca ralentit ton appli de façon considérable.
 
Pour t'en convaincre essaye cette classe :
 

Code :
  1. public class TestSystemOut {
  2. public static void main(String[] args) {
  3.  long debut = System.currentTimeMillis();
  4.  for (int i=0; i<10000; i++) {
  5.   System.out.println("" );
  6.  }
  7.  System.out.println(" => "+(System.currentTimeMillis()-debut));
  8. }
  9. }


 
Puis relance la après avoir mis le System.ou.println("" ) en commentaire

Reply

Marsh Posté le 14-12-2004 à 11:40:12    

Ok !
Donc si j'utilise log4j (à la place du System.out), cela ralenti autant que si je fait des System.out ?
 
En gros il ne faut rien mettre ?


Message édité par Mazda3 le 14-12-2004 à 11:40:59
Reply

Marsh Posté le 14-12-2004 à 12:00:20    

Autre question ... le temps que vous repondez a celle d'avant :jap: Toujours pour l'optmisation
Disons que j'ai un package ("A" ) avec 20 classes dedans
 
Dans une classe qu'on va appeller Voiture, d'un autre package ("B" ), je n'utilise que une classe("Marque.class" ) du package "A".
 
Mais dans le code de Voiture.java je fais :
 

Code :
  1. import A.*;


 
Vaut-il mieux que je fasse , en terme de performance :
 

Code :
  1. import A.Marques;


 
ou c'est negligeable ?


Message édité par Mazda3 le 14-12-2004 à 12:15:24
Reply

Marsh Posté le 14-12-2004 à 12:11:40    

mazda3 a écrit :

Ok !
Donc si j'utilise log4j (à la place du System.out), cela ralenti autant que si je fait des System.out ?
 
En gros il ne faut rien mettre ?


 
Evidemment, ça ralentit un peu par rapport à ne rien mettre mais ça reste bien mieux que le System.out
 

Code :
  1. public class TestLog4j {
  2. public static void main(String[] args) {
  3.  //init de log4j
  4.  Log4jInitStandAlone.init();
  5.  Logger logger = Logger.getLogger(TestLog4j.class.getName());
  6.  long debut = System.currentTimeMillis();
  7.  for (int i=0; i<10000; i++) {
  8.   logger.debug("" );
  9.  }
  10.  System.out.println(" => "+(System.currentTimeMillis()-debut));
  11. }
  12. }


 
pour moi, avec le System.out.println(), ça mettait 3 sec, avec Log4j ça met 0.8 sec

Reply

Marsh Posté le 14-12-2004 à 12:34:05    

mazda3 a écrit :

Autre question ... le temps que vous repondez a celle d'avant :jap: Toujours pour l'optmisation
Disons que j'ai un package ("A" ) avec 20 classes dedans
 
Dans une classe qu'on va appeller Voiture, d'un autre package ("B" ), je n'utilise que une classe("Marque.class" ) du package "A".
 
Mais dans le code de Voiture.java je fais :
 

Code :
  1. import A.*;


 
Vaut-il mieux que je fasse , en terme de performance :
 

Code :
  1. import A.Marques;


 
ou c'est negligeable ?


 
Ca change strictement rien. Si du décompile ton application, tu verra que le import ne figure nulle part et que tous tes appels à des classes voient utilisent le chemin complet, genre si t'as dans ton progs :
 

Code :
  1. import java.awt.Graphics;
  2. ...
  3. Graphics g = new Graphics();


 
Ton programme pseudo-compilé va remplacer tout ça part :
 

Code :
  1. java.awt.Graphics g = new java.awt.Graphics();


 
Le import sert juste lors de l'écriture du programme, pour que t'ai pas besoin de taper tout le chemin complet ;)
 
EDIT :
 
Personnellement, j'utilise toujours import A.Marques au lieu de A.*, comme ça en regardant le début du fichier, je vois tout de suite ce que j'utilise...


Message édité par FlorentG le 14-12-2004 à 12:35:11
Reply

Marsh Posté le 14-12-2004 à 13:40:57    

Ok, merci de vos réponses !

Reply

Marsh Posté le 14-12-2004 à 14:31:08    

bidem a écrit :

Ca ralentit ton appli de façon considérable.


mouais ... mais ton exemple n'est pas correcte : là tu écris dans la sortie standard alors que pour lui, c'est redirigé dans un fichier ce qui est plus rapide ...

Reply

Sujets relatifs:

Leave a Replay

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