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

Langage Java Discussion :

jvm : désactiver optimisations


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Par défaut jvm : désactiver optimisations
    Bonjour à tous,

    j'espère que ce post n'es pas mal placé. Je travaille actuellement sur un projet de jeu vidéo développé en java, à l'aide de la librairie LWJGL. Le jeu qui affiche pas mal d'images à l'écran, tourne très bien, même sur des machines peu ressentes. Toutefois, nous sommes confrontés à un problème de temps de chargement. En effet, en lancant le jeu avec les dernieres jvm, par défaut, JIT est activé. Lors du deuxieme lancement, le chargement est quasi immediat. Ce procédé peut se révéler pratique dans une application, mais inadapté pour les jeux vidéo, surtout pour un jeu amateur, le joueur peut en effet être rebuté par les chargements (qui peuvent aller jusqu'a 30 secondes pour une map). J'aimerais donc savoir quelles options ou autres technqiues, me permettraient de diminuer ces temps de chargements, quitte à perdre un peu en performance durant le rendu du jeu.

    Merci d'avance.

  2. #2
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    Heu... Je ne comprend pas trop ton problème ?


    Si tu veux désactiver le compilateur JIT il faut utiliser le flag -Xint de java... mais je ne comprend pas pourquoi tu voudrais faire cela ? Ton explication n'est pas très clair !


    a++

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ce sont deux jvm différentes? Si oui, ce n'est pas l'optimisation de la JVM qui entre en cause, c'est probablement le cache disque.

    Si votre application met 30 secondes à démarrer une map, la première chose à faire est de déterminer quelle partie de votre application consomme ces 30 secondes et améliorer les perfs dedans.

  4. #4
    Membre très actif
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Par défaut
    Salut adiguba,

    merci pour ta réponse rapide. Ensuite, je ne maitrise pas trés biens ce sujet, donc je vais essayer de pas dire trop de bétises ^^, n'hésites pas à me corriger. Si j'ajoute le flag -Xint, je passe en mode interprété, ce qui veut dire que la jvm interprètera en temps réel les instructions du bytecode, donc pour un jeu, c'est pas top. l'interet de JIT, c'est de compiler à la volée, en procédant entre autres à des optimisations en faisant une sorte de profiling. Et ces optimisations sont de plusieurs types et sont faites au fur et a mesure de l'exécution du code, ce qui explique la lenteur des chargements d'images au premier lancement du jeu. Ma question était, est ce qu'il y a un moyens de désactiver certaines optimisations effectués par JIT , en restant portables.

  5. #5
    Membre très actif
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Par défaut
    Pour le deuxième lancement, je n'ai pas précisé mais oui, c'est sur la même machine. Je lance une première fois l'application. Je la ferme, et je la relance. Quant à la cause du temps mis lors du chargement de la map, c'est clairement, le chargement des images : décompression des PNG, création d'un Buffer contenant les données de l'image, envoi vers la carte graphique, des étapes me paraissant quasi incompressibles.

  6. #6
    Membre très actif
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Par défaut
    c'est probablement le cache disque.
    est ce que vous pourriez me donner plus de détails sur ce point ?

  7. #7
    Membre très actif
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Par défaut
    Sur le site d'IBM, on peut trouver une description des paramètres que l'on peut passer a la JVM, dont celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -Xjit:verbose,optLevel=noOpt HelloWorld
    hélas, elle n'a pas l'air d'être prise en compte par toutes les JVMs ...

  8. #8
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par SQUAL Voir le message
    Sce qui veut dire que la jvm interprètera en temps réel les instructions du bytecode, donc pour un jeu, c'est pas top. l'interet de JIT, c'est de compiler à la volée
    En effet... mais c'est toi qui voulais désactiver les optimisations !

    Citation Envoyé par SQUAL Voir le message
    Et ces optimisations sont de plusieurs types et sont faites au fur et a mesure de l'exécution du code, ce qui explique la lenteur des chargements d'images au premier lancement du jeu.
    Je ne vois pas en quoi les optimisations de la JVM serait à l'origine des lenteurs des chargements d'images...


    Si tu as des problèmes de performances, commences déjà par cibler exactement leurs origines et montre nous le code en question...


    a++

  9. #9
    Membre très actif
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Par défaut
    Rebonjour,

    Tout d'abord, merci pour vos réponses. Je vais essayer d'être plus clair cette fois-ci. En fait, l'environnement java n'est pas la seule cible de notre jeu. En effet, un portage en XNA (C# donc) a débuté. En m'étant essentiellement concentré sur le portage du moteur graphique, je me suis rendu compte que le chargement d'un niveau (qui je le rappelle ne consiste principalement qu'à charger des images) était d'environs 2 à 3 secondes.
    Je me suis donc penché sur la manière dont XNA chargeait les images, me disant effectivement que je m'y prenais mal. Je pensais avoir un élément de réponse quand je me suis aperçu qu'XNA transformait les PNG que je lui fournissait en DDS (un format de texture directement interprétable par la carte graphique). Je me suis donc empressé de faire la même chose en java : Je lit un fichier DDS en entrée et j'envoie les données de la texture à la carte graphique. Or, je constate que j'ai toujours les mêmes temps de chargements. (S'il vous faut faut un benchmarket des sources, je peux les envoyer).
    Donc, je me suis dit que si XNA, basé sur C# qui se sert également d'une VM permet d'avoir ces performances la, je me suis dit que le problème venais de la JVM. C'est pour ca que je n'ai pas donné trop de précisions puisque je pensais avoir cerné le problème.

    J'ai parcouru le lien que tu as donné Sinok, mais je me demande une chose :
    lorsque je suis sous Eclipse, que je build le projet pour la première fois et que j'exécute, le temps de chargement d'une map (Et non le temps de lancement du jeu) est de 30 secondes. Lorsque je quitte et que je réexecutes à nouveau, il est de 2 secondes. Mais ensuite, si je fais une modification dans une classe (c'est le cas pour certaines classes) et que je rebuild, la le chargement est encore de 30 secondes, or, la JVM était déjà lancée. D'où mon interrogation sur JIT : quelles optimisations et à quel moment il les fait. Quand j'ai parlé de désactiver les optimisations, je parlais de désactiver "certaines" optimisations, comme le inlining. Si ces optimisations n'influent pas sur le temps d'exécution durant le jeu, quel serait l'intérêt de de les désactiver ? Tu dis Adigabu que les optimisations n'ont rien à voir avec les temps de chargements, et tu as surement raison, mais j'aimerais quand même comprendre cette différence de perf entre java et c#, sachant que j'ai deja fait l'effort de regarder du coté du code en lisant notamment un sujet sur ce forum :
    [URL="http://stackoverflow.com/questions/1927419/loading-pngs-into-opengl-performance-issues-java-jogl-much-slower-than-c-t"]. Voila, il y a déjà plus de détails.

    Merci de m'avoir lu.

  10. #10
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Ce que je ne comprend pas, c'est que tu souhaites désactiver des optimisations pour améliorer les temps de chargement... C'est un peu contradictoire non ?

    Tu affirmes que le problème vient de la JVM ? Comment peux-tu en arriver à cette affirmation aussi facilement ???

    Tes lenteurs viennent du chargement des Map ? Comment fais-tu cela ?
    As-tu fais des essais avec la solution donné sur la page que tu donnes en lien ?

    a++

Discussions similaires

  1. JVM désactivé le loading automatique au démarrage
    Par GroRelou dans le forum Langage
    Réponses: 13
    Dernier message: 17/07/2009, 15h35
  2. Réponses: 3
    Dernier message: 20/01/2009, 14h21
  3. Comment désactiver la JVM de Oracle 10g
    Par littleshrimp dans le forum Oracle
    Réponses: 3
    Dernier message: 15/09/2006, 13h36
  4. [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
  5. [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

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