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 :

Connaître les optimisations faites par la JVM


Sujet :

Java

  1. #21
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Merci pour cette modification.
    En fait je souhaitais faire quelque chose de ce genre, le problème c'est que parfois j'appelle ce type de code dans un thread : je divise l'image en plusieurs bandes de tailles égales et chaque thread gère une bande. Mon problème étant que la méthode de la classe Thread est "public void run()", donc je ne peux lui passer des paramètres.
    Mon idée avait donc été de créer cette méthode setParameters(...) avant d'appeler run()
    Aurais tu une idée pour améliorer cela afin que JIT sache comment optimiser ?
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  2. #22
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Citation Envoyé par ToTo13 Voir le message
    Ce sont des petites méthodes static aussi simples qu'utiles, ne comportant qu'une seule bouche avec un seul test. C'est donc la parfaite candidate pour devenir final.
    Le mot-clef final sur une méthode static n'aura aucun impact sur les performances : il n'y a pas de résolution de méthode à l'exécution !

    De toute manière de manière globale la JVM sait très bien inliner des méthodes non-final si besoin, en particulier si elles sont "implicitement final" (si aucune des classes filles du classloader n'a redéfini la-dite méthode).


    Citation Envoyé par ToTo13 Voir le message
    Mon idée avait donc été de créer cette méthode setParameters(...) avant d'appeler run()
    Aurais tu une idée pour améliorer cela afin que JIT sache comment optimiser ?
    Il t'as donné un exemple : il faut recopier les attributs d'instances dans des variables locales, et utiliser ces dernières.






    Sinon tu pourrais montrer un code complet et executable que l'on puisse lancer, et qui monterais les différences de temps d'exécution.
    Je crains que tu te focalises trop sur la JVM et que le problème pourrait venir d'ailleurs...

    a++

  3. #23
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Il t'as donné un exemple : il faut recopier les attributs d'instances dans des variables locales, et utiliser ces dernières.
    Je ne comprends pas ce que tu souhaites dire là.
    Dans la cas d'un thread, j'appelle d'abord la méthode setParameters afin de copier les informations nécessaires au traitement dans le tread, puis j'appelle run().
    Comment faire autrement ?
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  4. #24
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Ben comme l'indique tchize_ dans ta méthode tu recopies les attributs dans des variables locales :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            int param1 = this.param1;
            int param2 = this.param2;
            int sewidth = this.sewidth;
            int width = this.width;
            int height = this.height ;


    Mais encore une fois je doute que cela viennent de là...


    a++

  5. #25
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Dans ce cas c'est exactement ce que je fais dans ma méthode setParameters(), tout est mis dans des variables private.
    Comme ça lorsque j'appelle mon thread, tout les paramètres sont des variables private locales.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  6. #26
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    Dans ce cas c'est exactement ce que je fais dans ma méthode setParameters(), tout est mis dans des variables private.
    Comme ça lorsque j'appelle mon thread, tout les paramètres sont des variables private locales.
    "private locale" ca ne veut rien dire. Il parlait de les recopier dans des variables locales, c'est à dire visible uniquement dans la méthode.

    Mais de toute manière comme je l'ai dit je doute que ton problème viennent de cela, ni d'un détail du langage...


    a++

  7. #27
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    visible uniquement dans la méthode.
    Oui mais comment faire dans le cas d'un thread, puisque la méthode appelée est run() et qu'elle ne contient aucun paramètre ?


    [QUOTE=adiGuba;8335375Mais de toute manière comme je l'ai dit je doute que ton problème viennent de cela, ni d'un détail du langage...[/QUOTE]
    Un problème à la fois :-)
    Mais je regarde aussi d'autres possibilités.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  8. #28
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    Oui mais comment faire dans le cas d'un thread, puisque la méthode appelée est run() et qu'elle ne contient aucun paramètre ?
    Ben :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void run() {
            int param1 = this.param1;
            int param2 = this.param2;
            int sewidth = this.sewidth;
            int width = this.width;
            int height = this.height ;
     
            // ton code qui utilise les variables locales
    }

    Remarque : se contenter de déclarer les attributs en final serait tout aussi efficace...



    Citation Envoyé par ToTo13 Voir le message
    Un problème à la fois :-)
    Mais je regarde aussi d'autres possibilités.
    A mon avis là tu te perds dans des détails...


    a++

  9. #29
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    A mon avis là tu te perds dans des détails...
    Je sais... mais j'adore ça :-)


    Citation Envoyé par adiGuba Voir le message
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void run() {
            int param1 = this.param1;
            int param2 = this.param2;
            int sewidth = this.sewidth;
            int width = this.width;
            int height = this.height ;
            // ton code qui utilise les variables locales
    }
    Ok merci.
    J'aurai pensé que cela était équivalent à
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    private class maclass extends Threads
    {
     
    private int param1, param2, sewidth, width, height ;
     
    public void setParameters(BufferedImage image, int sewidth, int param1, int param2)
    {
            this.param1 =param1;
            this.param2 = param2;
            this.sewidth = sewidth;
            this.width = image.getWidth();
            this.height = this.getHeight() ;
    }
     
    public void run()
    {
            // Utilisation des variables private
    }

    puisque le thread est private et que les variables ne sont modifiées que dans setParameters et utilisées que dans run().
    Je vais modifier en conséquence est voir s'il y a un quelconque gain de performances (même si tu doutes, j'aime être sûr :p )
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  10. #30
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    J'aurai pensé que cela était équivalent à
    C'est équivalent si tu définis les attributs en final.
    Si ce n'est pas le cas il est toujours possible que les valeurs soient modifiées par un autre thread qui aurait une référence vers l'instance de "maclass".


    Maintenant en fait je doute qu'il y aura une différence.
    En général c'est plutôt l'inverse dans ce cas là : le thread optimise l'accès aux attributs et ne voit pas les modifications extérieures...


    a++

  11. #31
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    C'est équivalent si tu définis les attributs en final.
    Si ce n'est pas le cas il est toujours possible que les valeurs soient modifiées par un autre thread qui aurait une référence vers l'instance de "maclass".
    Une solution serait aussi de définir "private final class maclass extends Threads".
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  12. #32
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bon alors j'ai fait quelques tests :
    - mettre "final" les classes et arguments des méthodes que j'utilise dans ce code ne change rien aux performances.
    - récupérer les paramètres de traitement dans la méthode "run" afin qu'ils soient locaux, ne change rien non plus.
    Du coup je ne sais pas comment optimiser :-(

    Lorsque j'utilise l'option -Xcomp, je perds sérieusement en performances et là... c'est un mystère
    Le code reste aussi simple que court (calcul de minima/maxima sur des tableaux dont on connait les limites/bornes de calcul au préalable), alors pourquoi perdre en performances lorsque c'est préalablement compilé ?
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  13. #33
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    XComp précompile, ça veux dire qu'il n'a aucune idée de comment la méthode est réellement utilisée car aucune info de profilage disponible, ce qui nuit aux performances.
    -Xcomp
    Forces compilation of methods on first invocation. By default, the Client VM (-client) performs 1,000 interpreted method invocations and the Server VM (-server) performs 10,000 interpreted method invocations to gather information for efficient compilation. Specifying the -Xcomp option disables interpreted method invocations to increase compilation performance at the expense of efficiency.

    You can also change the number of interpreted method invocations before compilation using the -XX:CompileThreshold option.
    https://docs.oracle.com/javase/8/doc...unix/java.html

    Je crois qu'il faut arrêter là les chipottage à l'aveugle, et sortir un profiler pour savoir ce qui se passe réellement dans ton code et où les perfs sont perdues.

  14. #34
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    sortir un profiler pour savoir ce qui se passe réellement dans ton code et où les perfs sont perdues.
    Est ce qu'il y en a un efficace et simple ?
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  15. #35
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    J'ai utilisé le profiler de Netbeans et je suis surpris par la deuxième ligne :
    [IMG]www.thibault.biz/Developpez/Profiler01.png[/IMG]
    Je travaille avec/sur des BufferedImage ou des DV (classe perso pour le stockage de volume, mais qui ressemble à un BufferedImage 3D) avec un DataBuffer de type Byte.
    Je n'utilise JAMAIS dans mon programme des char[].
    Du coup je ne comprends absolument pas la présence de la deuxième ligne :-(
    Images attachées Images attachées  
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  16. #36
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Les char[] peuvent provenir simplement d'instances de String (utilisés en interne pour stocker les caractères). Avec le profiler tu peux inspecter le contenu des tableaux de char[], ou déterminer quelle instance englobe le tableau.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  17. #37
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Avec le profiler tu peux inspecter le contenu des tableaux de char[], ou déterminer quelle instance englobe le tableau.
    Merci, mais comment ?
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  18. #38
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Rien qu'en profilant ce programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Exemple {
     
        public static void main(String[] args) {
            JOptionPane.showMessageDialog(null, "Message");
        }
     
    }
    J'obtiens :

    Nom : Profile_1.PNG
Affichages : 78
Taille : 11,4 Ko

    Là, en double-cliquant sur la ligne avec char[], on obtient :

    Nom : profile_2.PNG
Affichages : 81
Taille : 39,4 Ko

    A gauche, les instances, avec leur valeur (en gris clair).
    A droite, en bas, tu as l'arbre inverse des références (à chaque fois que tu ouvres un niveau, tu obtiens l'instance qui contient l'instance du nœud au-dessus.

    Mais, tu verras, il y a beaucoup d'instances de String dans les classes de Java.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  19. #39
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Quel profiler as tu utilisé ?
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  20. #40
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Pour en revenir au problème de performances à l'origine de ce post, j'ai "peut être" l'explication.

    J'ai finalement isolé le code qui a des grosses différences performances en fonction du sens où l'on travaille (verticalement ou profondeur car je traite des volumes).
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    for (z=start ; z < end ; z+=inc)
    	{
    	aux = buffer[z] ;
    	Hist[aux]++ ;
    	if ( aux > maxi) maxi = aux ;
    	}
     
    for (z=start ; z < end ; z+=inc)
    	{
    	aux = buffer[z+inc2] ;
    	Hist[aux]++ ;
    	if ( aux > maxi ) maxi = aux ;
    	bufferout[z] = maxi ;
    	}
    La différences entre la classe qui travaille verticalement et celle qui travaille en profondeur va être uniquement la taille des additions.
    Par exemple sur un volume 512 x 512 x 512 :
    - Verticalement => start=0, end=512x512, inc=512, inc2=512
    - Profondeur => start=0, end=512x512x512, inc=512x512, inc2=512x512
    La taille des additions est la seule différence entre les algorithmes.

    Est ce que cela peut expliquer qu'un code soit plus rapide que l'autre ?
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/06/2010, 15h50
  2. Connaître les requêtes reçues par Oracle XE
    Par benben02 dans le forum Administration
    Réponses: 1
    Dernier message: 08/12/2008, 08h44
  3. Comment connaître les fichiers visibles par le serveur
    Par Najdar dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 10/04/2008, 13h41
  4. Réponses: 1
    Dernier message: 11/12/2007, 17h34
  5. [Tableaux] Suivre les modifications faits par chaque utilisateur
    Par dessinateurttuyen dans le forum Langage
    Réponses: 7
    Dernier message: 19/07/2006, 10h05

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