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

AWT/Swing Java Discussion :

Java Heap space et lenteur de chargement d'images


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Septembre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 8
    Par défaut Java Heap space et lenteur de chargement d'images
    Bonjour,

    Je suis actuellement entrain de développer une application bureau qui permet de gérer des images sous forme d'une galerie grâce à javaFx et Eclipse.
    Mon problème vient du fait de la lenteur du chargement des images ainsi qu'une erreur qui survient lorsque l'application est lancée depuis l'exécutable (.jar). Après vérification de l'exécution du jar en console je remarque l'erreur d'heap space.
    Je tiens à préciser que l'application se lance parfaitement bien depuis mon Eclipse tout en gardant le temps de chargement des images que j'aimerais d'ailleurs aussi améliorer.

    Premièrement les images sont stockées dans un dossier sur un serveur local (pas dans le dossier du projet) et sont chargées par le chemin stockés en base de données pour chacune d'entre elles. (J'ai remarqué que c'est la création de l'objet image à partir du chemin qui prenait du temps).
    Deuxièmement lors de la création de mon exécutable .jar je suis obliger de le placer aux cotés de tous les autres fichiers du projet (c'est à dire dans le dossier lui même) sans quoi l'exe n'ouvre rien du tout.

    Que pourriez-vous me conseiller pour résoudre les erreurs heap spaces générées par l'exe .jar et non pas dans Eclipse ?
    Et quelqu'un aurait t'il l'expérience nécessaire dans le domaine de la programmation Java et la gestion d'images afin de me donner des pistes pour réduire les temps de chargements ?

    J'ai l'impression de ne pas être très clair mais je n'arrive pas à mieux expliquer car je ne sais pas du tout d'où provient l'erreur ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 112
    Par défaut
    Citation Envoyé par VirussInside Voir le message
    Que pourriez-vous me conseiller pour résoudre les erreurs heap spaces générées par l'exe .jar et non pas dans Eclipse ?
    Et quelqu'un aurait t'il l'expérience nécessaire dans le domaine de la programmation Java et la gestion d'images afin de me donner des pistes pour réduire les temps de chargements ?
    "exe .jar" ? Tu as un jar et non un exe si je comprends bien. Pour résoudre le problème du heap space il faut augmenter la taille de mémoire alloué lors du lancement de la JVM. (http://www.developpez.net/forums/d13...mx-defaut-jvm/)

    Pour la lenteur que tu observes en réseau mais pas en local si j'ai bien compris. Il faut augmenter le débit du réseau...
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Septembre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 8
    Par défaut
    Citation Envoyé par wax78 Voir le message
    "exe .jar" ? Tu as un jar et non un exe si je comprends bien. Pour résoudre le problème du heap space il faut augmenter la taille de mémoire alloué lors du lancement de la JVM. (http://www.developpez.net/forums/d13...mx-defaut-jvm/)

    Pour la lenteur que tu observes en réseau mais pas en local si j'ai bien compris. Il faut augmenter le débit du réseau...
    Je me suis mal exprimé concernant le chargement des images.

    Ce n'est pas le chargement des images qui prend du temps mais bien la création dans le code Java des images ->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image monImage = new Image("cheminStockeDansBD");
    (C'est pourquoi la lenteur reste la même en local qu'en réseau)
    J'avais pensé dès le début que le chargement de toutes les images prendrait du temps c'est pourquoi je ne charge que les images (30) de la page actuellement visionnée.

    Concernant les heap space ton lien (il me semble) ne me donne pas de réponse pour ma situation qui est l'execution d'un .jar !?
    Executer mon code depuis Eclipse fonctionne parfaitement sans erreur mais lancer depuis le .jar rien ne se passe si ce n'est l'erreur d'heap space visible si le lancement cse fait en console.

    Merci de votre aide.

  4. #4
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Il ne faut pas lancer ton jar en double cliquant mais creer un fichier bat qui va le lancer. Dans le fichier bat, tu mets:

    java -Xms1g -Xmx4g -jar monjar.jar

    Note que -Xms représente la quantité mémoire minimale que va prendre la JVM (1 Go ici) et -Xmx la quantité max (4Go ici)

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    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 483
    Par défaut
    FAudrait voir combien ton application a besoin d'espace. Si t'es dans les 2/3 G pour afficher des image, ben c'est que tes image sont bien trop grosses et leur chargement bouffe la mémoire et le cpu. Essaie de réduire leur taille ou de changer de format de compression. Quand j'affiche un dossier avec des photos de vacance, windows n'est pas capable de charger plus de 6 images par secondes pour afficher les thumbnails, donc t'attends pas à des miracles pour afficher 30 photos de vacances

  6. #6
    Membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Septembre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 8
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Il ne faut pas lancer ton jar en double cliquant mais creer un fichier bat qui va le lancer. Dans le fichier bat, tu mets:

    java -Xms1g -Xmx4g -jar monjar.jar

    Note que -Xms représente la quantité mémoire minimale que va prendre la JVM (1 Go ici) et -Xmx la quantité max (4Go ici)
    Merci beaucoup cela fonctionne, j'ai cependant dû passer en -xms256m et -Xmx1g car 4Go était trop élevé :/ Je ne vois pas pourquoi car j'ai 16Go de RAM et un I7

  7. #7
    Membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Septembre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 8
    Par défaut Merci
    Merci à tous pour vos réponses !

  8. #8
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 918
    Billets dans le blog
    54
    Par défaut
    Je rappelle egalement qu'il existe un constructeur dans Image pour charger une image de manière asynchrone.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  9. #9
    Membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Septembre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 8
    Par défaut JavaFx
    Citation Envoyé par bouye Voir le message
    Je rappelle egalement qu'il existe un constructeur dans Image pour charger une image de manière asynchrone.
    Je travaille actuellement avec JavaFX et je ne trouve rien de similaire sur le Net pour charger les images et les créer de manière asynchrone.
    Suite à quelques tests sur le temps que prennent certains bouts de code, il s'avère que c'est justement la création des images d'après un chemin stocké en bd et/ou l'attribution à un imageView

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    date = new Date();
    imageView.setImage(new Image(imagePersonnelle.getCheminImage().toString()));
    System.out.println("Temps2 : " + (new Date().getTime() - date.getTime()));
    <-- Est la seule partie qui prend réellement du temps.

    Je cherche donc une solution afin de ne pas bloquer l'interface quand les images se chargent.

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 918
    Billets dans le blog
    54
    Par défaut
    Ca s'appelle la javadoc de JavaFX !!!


    Citation Envoyé par https://docs.oracle.com/javase/8/javafx/api/javafx/scene/image/Image.html#Image-java.lang.String-boolean-
    Image(String url, boolean backgroundLoading)
    Construct a new Image with the specified parameters.

    Parameters:
    url - the string representing the URL to use in fetching the pixel data
    backgroundLoading - indicates whether the image is being loaded in the background

    Throws:
    NullPointerException - if URL is null
    IllegalArgumentException - if URL is invalid or unsupported

    See Also:
    Image(java.lang.String, java.io.InputStream, double, double, boolean, boolean, boolean)
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  11. #11
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    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 483
    Par défaut
    Citation Envoyé par VirussInside Voir le message
    Merci beaucoup cela fonctionne, j'ai cependant dû passer en -xms256m et -Xmx1g car 4Go était trop élevé :/ Je ne vois pas pourquoi car j'ai 16Go de RAM et un I7
    Sûrement parce que tu tourne avec une java 32 bits et non pas 64

  12. #12
    Membre du Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Septembre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 8
    Par défaut Grand merci
    Un énorme merci à tous j'ai pu régler mes problèmes grâce à vous.

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

Discussions similaires

  1. Chargement d'un TFileInputDelimited (java heap space)
    Par TheTcha dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 27/12/2012, 17h00
  2. [Info] Chargement image et Java heap space
    Par dazz_x dans le forum Langage
    Réponses: 9
    Dernier message: 11/09/2007, 11h51
  3. [jarsigner] java heap space
    Par GLDavid dans le forum Langage
    Réponses: 3
    Dernier message: 16/08/2006, 11h35
  4. Eclipse erreur : java.lang.OutOfMemoryError: Java heap space
    Par sderecourt dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 14/04/2006, 11h28
  5. [ memoire ] Java Heap Space
    Par natha dans le forum Général Java
    Réponses: 10
    Dernier message: 23/01/2006, 11h15

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