IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

[Performances]Optimisation de code


Sujet :

Java

  1. #1
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut [Performances]Optimisation de code
    Salut à tous ! Voilà j'ai 2 probleme d'optimisation.
    Le premier est simple mais ça me fait refléchir et je trouve pas la reponse ^^ : est ce que ça prend plus de memoire ou de ressource d'importer toutes les classes d'un package ? Par exemple si j'ai besoin de la classe file et file reader, vaut mieux faire import java.io.*; ou import java.io.File; import java.io.FileReader;

    2eme probleme : j'aimerai convertir un vector en matrcice de string, mais il n'existe pas de methods a proprement parler alors je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //vec = un vector
    Object [] all = vec.toArray();
    string[] allString = new String[all.length];
    for(int i = 0; i < all.length; i++) {
           allString[i] = (string)all[i]:
    }
    Ce code me suffit mais je le trouve lourd et je me demander si il n'y aurais pas une méthode plus "direct" et incluant moins de variable. Merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 104
    Points : 140
    Points
    140
    Par défaut
    Première question :
    Importer toutes les classes d'un package n'est pas pénalisant à l'exécution. Par contre, c'est moins lisible et cela oblige à résoudre les conflits qui apparaissent s'il existe des classes de même nom dans deux packages différents.

    Seconde question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string[] allString = new String[vec.size()];
    vec.toArray(allString);

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Si tu n'est pas en environnement multithreadé et que tu souhaite optimiser ton code, n'utilise pas la classe Vector mais ArrayList.

    En effet, la classe vector est threadSafe et donc plus couteuse en temps. De plus cette classe devrait disparaitre dans les prochaines versions du jdk

    http://java.developpez.com/faq/java/...IONS_info_list

    Sun Certified Business Component Developer
    Sun Certified Java Programmer
    --
    The definitive toolbox for GWT applications: gwt-toolbox
    My blog about Java and JEE: Benjamin's Blog

  4. #4
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Non la classe Vector ne disparaitra pas. En outre les blocs synchronized ne sont pas aussi lents que beaucoup trop de gens le disent. Referez-vous a ce tres bon article d'IBM.

    Cela dit il est preferable de passer par une ArrayList. Si tu as besoin d'une version thread safe il suffit de faire appel a la methode Collections.synchronizedList(List) qui renvoie une version thread safe de ta liste (que ce soit une ArrayList, une LinkedList, etc.)
    Romain Guy
    Android - Mon livre - Mon blog

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Citation Envoyé par Gfx
    Cela dit il est preferable de passer par une ArrayList. Si tu as besoin d'une version thread safe il suffit de faire appel a la methode Collections.synchronizedList(List) qui renvoie une version thread safe de ta liste (que ce soit une ArrayList, une LinkedList, etc.)
    Nous sommes donc d'accord..., si nous ne sommes pas en environnement multithreadé, plutôt utiliser l'ArrayList plutôt que son vis à vis Vector.
    En ce qui concerne la disparition de Vector, tu dois avoir raison, en effet cette classe n'est pas annoncée comme deprecated (une petite erreur dans la faq java alors???)

    Sun Certified Business Component Developer
    Sun Certified Java Programmer
    --
    The definitive toolbox for GWT applications: gwt-toolbox
    My blog about Java and JEE: Benjamin's Blog

  6. #6
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Et puis meme, les methodes deprecated ne sont pas pres de s'en aller. On fait tellement attention a la retro compatibilite que je doute que ca arrive avant un bon moment.
    Romain Guy
    Android - Mon livre - Mon blog

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Importer toutes les classes d'un package n'est pas pénalisant à l'exécution.
    En effet ca n'a strictement rien à voir avec l'intruction de pré-processeur C/C++ #include qui elle copie vraiment l'entête/header désignée dans le code (ca va surtout faire un exe plus gros que plus lent d'ailleurs si on inclue tout et n'importe quoi). Le import java se rapproche plus du using namespace C++. Bref le compilateur va remplacer les noms courts par des nons longs lors de la compilation.

    Par contre, c'est moins lisible
    Non ou alors c'est pour les débutant qui ne connaissent pas l'API JAva ou les libs qu'ils utilisent.
    De tout facon avec les IDE récent ca importe peu (ex: dans JBuilder on fait control + click gauche sur le nom d'une classe pour afficher son code).

    et cela oblige à résoudre les conflits qui apparaissent s'il existe des classes de même nom dans deux packages différents.
    Ce qui est super-rare sauf si on nomme mal ses classes. Le seul conflit récurrent qui m'oblige à régulèrement mettre le nom long d'une classe concerne java.util.List et java.awt.List. Les autres conflits sont plutot annecdotiques.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 104
    Points : 140
    Points
    140
    Par défaut
    Quand je fait une revue de code, je n'ai pas toujours l'assistance d'un IDE pour me dire à quel package appartient une classe. Donc j'aime bien avoir un import explicite.

    Par ailleurs, j'ai développé un générateur de code Java qui nomme les classes selon des noms imposés par une description de données. Ces classes n'utilisent pas l'import multiple pour éviter des conflits imprévisibles chez les clients qui utilisent le générateur.

    Je reconnais que ce sont deux cas qui ne sont pas rencontrés tous les jours. Mais ils expliquent pourquoi je préfère importer mes classes une à une plutôt qu'en bloc. Un IDE récent permet également de faire cela facilement.

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/09/2014, 09h48
  2. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  3. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  4. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59
  5. [debug] performances / optimisation
    Par tmonjalo dans le forum C
    Réponses: 2
    Dernier message: 28/07/2003, 23h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo