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 :

Comment optimiser le GC pour allocation mémoire des images?


Sujet :

Langage Java

  1. #1
    Membre confirmé Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Points : 465
    Points
    465
    Par défaut Comment optimiser le GC pour allocation mémoire des images?
    je suis en train de charcher le moyen d'optimiser les capacités du Garbage Collector afin d'accélérer le chargement de ressources Image dans une application. Sachant que j'utilise plus de 1000 resources images, je les charge préalablement grâce à un cache permettant le "swap" des ressources sur disque. Cela fonctionne parfaitement jusqu'à la 500-600e ressource, puis la boucle de chargement se fige rapidement en attendant le passage du GC.
    J'ai passé les variables contenant les images à "volatile", j'ai passé les Threads à MAX_PRIORITY pour éviter d'être surchargé par le Thread normal du GC et aussi je les ai activé en mode Daemon.

    Ma question est:
    Comment optimiser la rapidité sur une telle structure Java? L'application tourne jusqu'à 600 images en cache avec 1024M de RAM pour Java. J'aimerais pouvoir dépasser cette limitation.

    le schéma est le suivant pour le chargement des resources:
    Images attachées Images attachées  

  2. #2
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Tu peux utiliser les WeakReference. ça libère les ressources quand le système a besoin de place. Je ne sais pas si c'est ce dont tu as besoin.

  3. #3
    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 broumbroum
    J'ai passé les variables contenant les images à "volatile",
    En quoi cela concerne-t-il ton problème ???

    Citation Envoyé par broumbroum
    j'ai passé les Threads à MAX_PRIORITY pour éviter d'être surchargé par le Thread normal du GC et aussi je les ai activé en mode Daemon.
    Je ne pense pas que changer la priorité soit vraiment utile si le GC travaille trop... Quand au mode daemon j'avoue ne pas comprendre...

    Ma question est:
    Comment optimiser la rapidité sur une telle structure Java? L'application tourne jusqu'à 600 images en cache avec 1024M de RAM pour Java. J'aimerais pouvoir dépasser cette limitation.

    le schéma est le suivant pour le chargement des resources: [/QUOTE]


    Que fais ton cache exactement ? Et les 600 images sont chargé en même temps ? Ca représentent quelle quantité de mémoire ???


    a++

  4. #4
    Membre confirmé Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Points : 465
    Points
    465
    Par défaut Graphics compression?
    Citation Envoyé par adiGuba
    (...)

    Que fais ton cache exactement ? Et les 600 images sont chargé en même temps ? Ca représentent quelle quantité de mémoire ???


    a++
    ben justement c'est ma question... sachant que les images sont stockées en ".png", elle font 4Ko d'espace chacune. Si je les passes au 0.3x zoom (la résolution des images varie selon le mode d'affichage, spécifiquement l"ow", "mid" ou "high"): 1.6ko seulementen low resolution.
    Mais je remarque évidemment que lors du chargement en mémoire physique la compression disparaît et ça passe à ~200Ko en 1x zoom, je pense 66Ko env. en "low res", car ImageIO donne le format traditionnel en "bits-map".
    Plus précisément, je reformule la question: Est-ce possible de compresser les Graphics? OpenGL sait le faire? ou Zip?

  5. #5
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Il y a beaucoup de choses qui me font penser qu'il y a un bug quelque part dans ton code, ou que tu n'as pas compris quelque chose.

    Ainsi quand tu demandes si Est-ce possible de compresser les Graphics? la réponse est forcément non : un Graphics est un objet très ponctuel, destiné uniquement à allumer des pixels sur un périphérique - image, imprimante, écran. Il n'est pas pensable de le comprimer, c'est comme si tu demandais s'il était possible de comprimer une socket.

    Et dans l'ensemble tes principes me semblent bons ; je ne vois pas pourquoi cela ne fonctionnerait pas ; si ton système de swap est bon, il n'y a pas de raison que le gc passe trois plombes à nettoyer les objets.

    Première piste, peut être : fais-tu bien les dispose de tes Graphics ? C'est l'erreur classique alors il faut tenter

    Ensuite, analyse ton code pour voir s'il n'y a pas un endroit où les objets s'accumulent, sans être libérables. Eventuellement fait intervenir un profiler.

    Et tiens nous au courant.
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

  6. #6
    Membre confirmé Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Points : 465
    Points
    465
    Par défaut Jai
    Citation Envoyé par gifffftane
    (...)
    Ainsi quand tu demandes si Est-ce possible de compresser les Graphics? la réponse est forcément non : un Graphics est un objet très ponctuel, destiné uniquement à allumer des pixels sur un périphérique - image, imprimante, écran. Il n'est pas pensable de le comprimer, c'est comme si tu demandais s'il était possible de comprimer une socket.
    (...)
    ben c est sur que ca met trop de temps. je ne vais pas attendre 15 min pour pouvoir commencer a jouer (c une plate-forme de jeu, cela dit)!!! du coup je me tourne vers la crompression des pixels justement pour eviter l usage onereux de memoire ram. sachant que les jeux demandent plus de rapidité, il faut le meilleur de Java pour obtenir ce que lon veut.
    Alors peut-etre que l API traditonnelle est encore insuffisante, c pourquoi je cherche une librairie plus specifque. Particulierement, j ai deja essaye JAI pour la conversion des flux images, et ca tourne plus vite avec les fonctions JAI que ImageIO originale.
    Par exemple, "Image multi-converter", une de mes applications présentes, c efficace. je gagne en tout cas 30 % de perfs avec le cache. Tout cela sans pour autant modifier le code, uniquement les fonctions clefs de l application, tel le Thread de conversion de format graphique.
    voilà! donc JAI java advanced imaging est à envisager pour le chargement des images.

  7. #7
    Membre confirmé Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Points : 465
    Points
    465
    Par défaut cache mgr
    le code du cache est ici sur DVP. mais ce serait plutot celui des Srites graphique que je modifierai...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/07/2011, 09h19
  2. comment optimiser la config pour ce genre de requête absurde ?
    Par clavier12AZQSWX dans le forum Requêtes
    Réponses: 7
    Dernier message: 21/07/2011, 14h03
  3. [PowerShell] Comment optimiser get-childitem pour ne pas parcourir tout un repertoire ?
    Par yapooze dans le forum Scripts/Batch
    Réponses: 11
    Dernier message: 02/11/2010, 10h25
  4. Allocation mémoire des Queue
    Par Ikit dans le forum C#
    Réponses: 1
    Dernier message: 05/12/2008, 12h46
  5. Réponses: 1
    Dernier message: 11/10/2006, 18h15

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