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

2D Java Discussion :

Consomation memoire excessive programe java (BufferedImage)


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 50
    Par défaut Consomation memoire excessive programe java (BufferedImage)
    Bonjour,
    Je suis en train de finir une application qui me permet de numériser des documents pour les mettre en bdd.
    Pour faire simple l'utilisateur peut créer un lot de documents a numériser.
    On sélectionne ce lot dans la fenêtre principale qui l'affiche dans une nouvelle jframe.
    Dans cette jframe, les documents numérisés s'affichent dans une jtable et la sélection d'une page l'affiche dans un jpanel(avec pdfRenderer).
    pour optimiser la navigation et éviter la latence crée par la création de l'image a partir du pdf chaque objet document contient une bufferedImage avec la première page du document a afficher.
    le problème est que cela consomme énormément de mémoire.
    De plus je pense avoir des fuites de mémoire car lorsque je ferme la jframe avec un dispose la consommation mémoire ne diminue que peu.
    existe t-il un moyen de voir combien de mes objets sont chargés en mémoire et leur taille?
    si quelqu'un a une idée pour optimiser tout ça je prends.

    Merci beaucoup.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Pour réduire la consommation mémoire, rien de magique :
    1. soit tu augmentes l'usage CPU en calculant en fonction du besoin,
    2. soit tu augmentes l'usage disque en stockant sur disque les images et en lisant à la demande.

    Si la RAM diminue peu (vu par l'OS), ce n'est pas forcément une fuite mémoire : la JVM conserve la zone mémoire libérée et ne la redonne pas immédiatement à la machine.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 50
    Par défaut
    Merci.
    Le fichier pdf est déjà sur le disque et le calcul du rendu par PdfRenderer est très lent (environ 250ms)

    Lors de la navigation entre les différents pdfs cette latence de 250ms est pénible (j'ai testé plusieurs librairie de rendu gratuite : pdfbox, icepdf, jpedal le temps de rendu est équivalent ou pire pour icepdf), c'est pour cette raison que j'ai décidé de stocker dans mon objet document un attribut Image avec le rendu de la premiere page du pdf créé a l'ouverture de la jframe. .

    Du coup la bufferedImage n'est peut être pas adapté pour mon utilisation. existe t-il un moyen de la compresser pour la stocker?
    Ou peut être un autre type plus adapté qui occuperait moins de place en ram.

    Merci encore.

  4. #4
    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
    bah, tu peux stocker les images en png et le lire à la volée, mais tu va tourner en boucle. Lire le png prend aussi du temps, peut être même plus que du rendu pdf. 250ms, c'est peu selon moi. Dans quel cas d'utilisation c'est gênant?

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Ah.... 250ms c'est très court. Comme dit Tchize, même une lecture d'une image avec affichage sera dans cet ordre de grandeur.
    Je pensais que c'était après le clic sur une ligne de la JTable que le rendu était lent. En relisant ton premier post, j'imagine que la lenteur se situe sur l'affichage de la JTable ?
    Pour afficher la JTable, tu calcules le rendu PDF de chaque PDF pour en afficher une miniature par ligne. C'est ce traitement qui est lent ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 50
    Par défaut
    Ce traitement au chargement est lent, mais cela n'est pas trop gênant.

    C'est en effet au clic sur la jtable quand on sélectionnait le document, que l'affichage du pdf était lent. Du coup lorsque l'on navigue dans la jtable avec les flèches du clavier par exemple cette petite latence bloque le programme tant que le pdf n'est pas affiché et la c'est long (250 ms etant une moyenne parfois cela peut être 800). J'avais testé avec des threads pour lancer le rendu (la latence a la navigation disparait), mais comme je ne suis pas très doué il y avais également des problèmes de fuites, des instances ne ce fermaient pas bien et cela finissait par consommer beaucoup de mémoire également.

    C'est pour cette raison que lors du chargement initial je conserve la bufferdImage dans une liste c'est rapide mais gourmand. Si seulement il était possible de compresser une BufferedImage...

    Je vais continuer mes tests, du coup je vais peut être remettre le rendu du pdf dans un swingworker et tenter le gérer tout ça proprement.

    Si une idée vous viens je prends

    Merci beaucoup.

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

Discussions similaires

  1. program java pour la composition des service web
    Par bleu angle dans le forum Services Web
    Réponses: 0
    Dernier message: 04/04/2009, 12h33
  2. [tomcat][memoire] java.net.URL et fuite mémoire
    Par Seiya dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 09/03/2009, 10h41
  3. Lanceur de programe Java
    Par Piolet dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 05/03/2008, 12h54
  4. Récuperer des données par program Java
    Par irouni dans le forum Langage
    Réponses: 1
    Dernier message: 08/02/2008, 11h02
  5. Probleme Programation JAVA débutant
    Par tomtom62136 dans le forum Langage
    Réponses: 1
    Dernier message: 03/03/2006, 12h07

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