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 :

Optimisation Vs JVM


Sujet :

Java

  1. #1
    Membre averti
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Points : 328
    Points
    328
    Par défaut Optimisation Vs JVM
    Bonjour,
    Tout d'abord, j'aime bien ce langage et j'ai tendance à le préférer sur d'autres.
    Ceci me pousse à méditer un peu plus sur ce dernier sans pour autant le critiquer sans fondements. Il s'agit de mettre en évidence quelques questions qui me sont posées malgré moi.
    aujourd'hui, je m'intéresse à la complexité des programmes dans un souci d'optimisation. Seulement, le JVM fait à sa sauce! je dirai même que cela commence à m'agacer dans la mesure ou je n'ai pas vraiment de bases garanties sur les quelles je pourrais m'appuyer en profondeur.
    Est ce que c'est le revers de la médaille de la portabilité?
    vous me direz peut être qu'il faut se documenter de plus en plus sur la JVM. Je répond que je préfère me concentrer sur la programmation. Et je pense que c'est le cas d'un grand nombre d'utilisateur.
    Faut il changer de langage dans ce cas précis?
    Je me trompe peut être!
    Bien à vous
    L'immortalité existe, elle s'appelle connaissance

  2. #2
    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
    heu, mais quelle est la question dans l'histoire?

  3. #3
    Membre averti
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Points : 328
    Points
    328
    Par défaut
    aujourd'hui, je m'intéresse à la complexité des programmes dans un souci d'optimisation. Seulement, le JVM fait à sa sauce! je dirai même que cela commence à m'agacer dans la mesure ou je n'ai pas vraiment de bases garanties sur les quelles je pourrais m'appuyer en profondeur.
    Est ce que c'est le revers de la médaille de la portabilité?
    ma réflexion sous entend ma question; pourrait on faire une étude de complexité alors que la jvm fait à sa sauce? qu'en pensez vous?
    Merci à vous
    L'immortalité existe, elle s'appelle connaissance

  4. #4
    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,


    En quoi la JVM en fait-elle à sa sauce ?
    Pourquoi ne pourrait-on pas faire d'étude de complexité ?


    a++

  5. #5
    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
    oui je comprend pas ou est le problème. Ce que la jvm 'fait à sa sauce' est exactement la même chose que les bidouille que va faire un compilateur C pour optimiser un code. Ca gagnera des performance, mais un code en O(n²) restera un code en O(n²).

  6. #6
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    De toute facon, les compilateurs actuels (ou la machine virtuelle) produisent des codes bien mieux optimisés que la plupart des programmeurs produiraient. Il y a quand meme des 100aines de personnes qui se sont gratté la tete pour les pondre...

    Par contre, ca ne dispense pas des optimisations de conception. Si on parcours 10 fois la meme liste qu'on pourrait ne parcourir qu'une fois, le compilateur ou la machine virtuelle ne fera pas des miracles...

  7. #7
    Membre averti
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Points : 328
    Points
    328
    Par défaut
    Bonjour,
    je n'ai aucun recul par rapport à une optimisation professionnelle. Néanmoins, je me pose la question. A priori, Les couches (compilateur, machine virtuelle,...), ne peuvent qu'arranger les choses si j'ai bien compris.
    Salutations
    L'immortalité existe, elle s'appelle connaissance

  8. #8
    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
    quelles "choses" ?

  9. #9
    Membre averti
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Points : 328
    Points
    328
    Par défaut
    quelles "choses" ?
    optimisation du programme.
    L'immortalité existe, elle s'appelle connaissance

  10. #10
    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
    elles vont optimiser les performance, oui (c'est le but) avec des technique comme l'inlining et en réorganisant le code dans certains cas bien précis, mais ca ne changera rien au fait qu'un algorithme mal concu restera mal concu, quel que soit le compilateur.

  11. #11
    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
    @wafiwafi : j'ai comme l'impression que tu prend la chose du mauvais coté. On dirait que tu cherches des optimisations "magiques", et généralement dans ces cas là on va droit dans le mur...

    Avant de penser "optimisation" il faut d'abord concevoir des algorithmes clair et précis, faire des tests de montée en charge, et détecter les éventuels portions de code à l'origine de problèmes de performance.

    Tant qu'un problème de performance n'est pas détecté et bien ciblé, les "optimisations" sont contre-productif et pourrait s'avérer encore plus problématique.

    a++

  12. #12
    Membre averti
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Points : 328
    Points
    328
    Par défaut
    j'ai comme l'impression que tu prend la chose du mauvais coté. On dirait que tu cherches des optimisations "magiques", et généralement dans ces cas là on va droit dans le mur...
    J'en prends note. Effectivement cela pourrait être problématique!
    Les conseils sont pertinents. A moi de méditer sur l'ensemble de cette discussion pour me corriger. Je me pose peut être trop de questions; néanmoins, cela m'a permis par le passé une meilleure maitrise analytique de ce que j'aborde.
    Bien à vous
    L'immortalité existe, elle s'appelle connaissance

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Bonjour,

    Il ne faut pas non plus croire a des miracles les optimisations des compilateurs ne remplaceront jamais une optimisation de l'algorithme.

    Par exemple le code suivant :

    int a = 0;
    int b = a;
    a = 0;
    int c = a;
    a = 0;
    int d = a;

    Une optimisation du compilateur pourra faire ceci :

    int a = 0;
    int b = a;
    int c = a;
    int d = a;

    Mais c'est tout.

    Il ne remplacera jamais 2 boucles imbriquées par une seule. Seul le talent du programmeur pourra le faire.

  14. #14
    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
    Cela rejoint ce que je dit : il faut travailler ses algorithmes plutôt que de chercher des soit-disant "astuces d'optimisation"...


    a++

  15. #15
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 93
    Points : 90
    Points
    90
    Par défaut
    juste une petite remarque à contre courant
    J'ai dernièrement implémenter un comparateur de ressemblance entre deux chaînes de caractères. J'ai eu besoin de rechercher les mots d'une chaîne dans une autre, et j'ai donc implémenter ce qui, d'après mes lectures, se faisait de mieux, au niveau algorithme dans ce domaine Booyer Moore.
    Afin de faire une comparaison, j'ai réfléchi à un rapide algo mais cette fois basé sur les fonctions natives...
    Résultat des courses, je me suis fait péter par les fonctions natives (3 fois plus rapide en moyenne ...)
    (bon, bien sur, pas n'importe quel fonction native un split rend les performances pourries mais une combinaison de indexof et super performant...)
    Du coup où peut-on trouver la complexité des fonctions natives?

  16. #16
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Citation Envoyé par _xme_ Voir le message
    Du coup où peut-on trouver la complexité des fonctions natives?
    En regardant le code source des fonctions en questions, qui sont fournies dans le JDK.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  17. #17
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Citation Envoyé par _xme_ Voir le message
    Du coup où peut-on trouver la complexité des fonctions natives?
    Aller, comme je suis sympa (et que j'ai les sources sous la main )
    Code : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
       public int indexOf(int ch, int fromIndex)
       {
          int max = offset + count;
          char v[] = value;
     
          if (fromIndex < 0)
          {
             fromIndex = 0;
          }
          else if (fromIndex >= count)
          {
             // Note: fromIndex might be near -1>>>1.
             return -1;
          }
     
          int i = offset + fromIndex;
          if (ch < Character.MIN_SUPPLEMENTARY_CODE_POINT)
          {
             // handle most cases here (ch is a BMP code point or a
             // negative value (invalid code point))
             for (; i < max; i++)
             {
                if (v[i] == ch)
                {
                   return i - offset;
                }
             }
             return -1;
          }
     
          if (ch <= Character.MAX_CODE_POINT)
          {
             // handle supplementary characters here
             char[] surrogates = Character.toChars(ch);
             for (; i < max; i++)
             {
                if (v[i] == surrogates[0])
                {
                   if (i + 1 == max)
                   {
                      break;
                   }
                   if (v[i + 1] == surrogates[1])
                   {
                      return i - offset;
                   }
                }
             }
          }
          return -1;
       }

  18. #18
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 93
    Points : 90
    Points
    90
    Par défaut
    Merci mais je me demandais les fonctions natives ne sont elle pas optimisée plus particulièrement que le reste?
    C'est à dire si je copie cette source et que je la mets dans une classe en static suis-je censé obtenir les mêmes perf que la méthod indexOf?

  19. #19
    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
    Il ne s'agit pas de "fonctions natives" mais d'une simple méthode Java. Il n'y a pas de raison qu'elle bénéficie d'optimisation plus poussé que n'importe quelle autre méthode... Il n'y a rien de "magique" !

    La seule différence qu'il peut y avoir avec une méthode "externe" vient du fait que cette dernière ne pourra pas avoir d'accès direct aux attributs de la classe String...

    a++

  20. #20
    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
    il faudrais voir l'implementation de votre algorithme pour situer le problème, mais dans les erreur courante que l'on retrouve et qui plombent les performance
    -> Créer inutilement (directement ou indirectement) des objets dans une boucle
    -> Appeler régulièrement dans une boucle une méthode en la considérant o(1) alors qu'elle est en fait o(n)
    -> utiliser un stockage qui n'a pas les performance que l'on pense

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Optimisation de votre SGBDR et de vos requêtes...
    Par SQLpro dans le forum Langage SQL
    Réponses: 35
    Dernier message: 11/01/2013, 11h49
  2. jvm : désactiver optimisations
    Par SQUAL dans le forum Langage
    Réponses: 21
    Dernier message: 30/11/2010, 10h47
  3. [JVM]Optimiser la bibliothèque de la JVM ?
    Par Regis.C dans le forum Général Java
    Réponses: 5
    Dernier message: 17/08/2005, 10h54
  4. [JVM][OPTIONS][OPTIMISATION]pc dédié à Java
    Par narmataru dans le forum Général Java
    Réponses: 7
    Dernier message: 16/04/2003, 17h12
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24

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