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 :

[JVM]maxMemory() Role exact


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Par défaut [JVM]maxMemory() Role exact
    Bonsoir,

    Je ne parviens pas à comprendre le problème suivant:
    J'ai une grande BufferedImage dont l'utilisateur peut régler la taille. Ceci peut générer une OutOfMemoryError que j'essaie de détecter plutôt que de la lever avec un bloc try - catch. Pour cela, je regarde à l'aide de Runtime.freeMemory(), Runtime.totalMemory() et Runtime.maxMemory les quantités de mémoire allouées avant création de mon image et après.

    1) Voici ce que j'ai après création de l'image:
    totaMemory :59544 Ko
    maxMemory 131072
    FreeMemory 1643

    Si j'augmente encore la taille de l'image très légèrement, l'erreur de dépassement apparait. Pourtant maxMemory m'indique qu'il reste environ 70000Ko de libre. QQ'un a-t-il une explication?

    2) Mon image est affiché sur un Panel, qd je réinstancie une nouvelle image, je n'ai pas l'impression qu'il libère de la mémoire, est-ce possible?

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 900
    Billets dans le blog
    54
    Par défaut
    Salut, quelle JVM utilises-tu ?

    Avant Java 5.0 les JVM de SUN avaient un taille de tas (en memoire) max de 64Mo et il fallait utiliser des flag -Xmx<taille><unite> pour permettre a la JVM d'utiliser un tas plus grand.

    Ex:
    D'autre JVM commes celles d'IBM pouvaient reclamer un tas plus grand dynamiquement si necessaire.
    Depuis Java 5.0 la JVM de SUN augmente son tas de maniere dynamique. Il n'y a guere que dans les cas ou l'augmentation est tres rapide (non-detectable par la JVM) ou que la taille reservee est enorme que l'OutOfMemory apparait.
    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

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Par défaut
    Je crois que j'ai compris en fait le pb.
    Effectivement, j'utilise le JDK1.4.1_07. Je pense qu'effectivement lorsqu'on lance la JVM, les paramètres doivent être les suivant:
    java initial heap size:64Mo
    java maximal heap size:128 Mo
    Ce qui fait que l'on ne dispose que de 64 Mo et non de 128 Mo!!
    je ne comprenais pas pourquoi l'erreur survenait à un (totalMemory-Freemory) de 64 Mo et non de 128 Mo.

    D'après ce que tu me dis, avec un JDK 1.5, ce pb ne surviendra pas... Je teste illico. Il faut simplement veiller à ce que l'image générée ne soit pas exagérément trop gde.

    Au fait, on peut récupérer la RAM de l'utilisateur?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Par défaut
    Bon, je viens de tester avec le JDK1.5, cela ne résout pas le pb de l'erreur Outofmemory. La machine JVM 1.5_04 n'a pas alloué d'espace mémoire supplémentaire dynamiquement. Le comportement reste le même qu'avec le compilateur précédent. Néanmoins, maintenant, je crois piger comment intercepter cette erreur, j'espère....

    En fait, l'espace par défaut alloué à la machine Java est de 64 Mo par défaut je pense

  5. #5
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Lis http://www.progx.org/index.php?section=replies&newsid=314 et http://www.progx.org/index.php?section=replies&newsid=315

    J'explique dans ces deux articles comment fonctionne la segmentation memoire de la JVM et comment l'adapter a tes besoins.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Par défaut
    Je viens de lire les articles: très intéressant.

    Encore un truc bizarre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class Test{
    	Test(){
    		System.out.println(Runtime.getRuntime().maxMemory()/1024/1024+" Mo");
    	}
    	public static void main(String[] args){
    	new Test();
    	}
    }
    Ce programme affiche clairement la taille maximum octroyé au heap (en Mo.)
    Lorsque j'exécute avec la machine virtuelle 1.4:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    java Test
    128 Mo
    java -Xmx212Mo Test
    276 Mo
    java -Xmx128Mo Test
    192 Mo
    Pourquoi rajoute-t-il 64 Mo??

    Alors qu'avec la 1.5
    java -Xmx256Mo Test
    254 Mo
    java Test
    63 Mo

    HELPPPPPP
    [/code]

Discussions similaires

  1. Quel est le role exact de synchronizedMap ?
    Par facilus68 dans le forum Général Java
    Réponses: 1
    Dernier message: 10/02/2009, 09h42
  2. Role exact de "Import"
    Par Clorish dans le forum Langage
    Réponses: 2
    Dernier message: 27/03/2007, 10h04
  3. [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
  4. Qu'est-ce que c'est que Nessus, ça fait quoi exactement ?
    Par PeterT dans le forum Développement
    Réponses: 3
    Dernier message: 24/07/2002, 11h23
  5. C'est quoi exactement un générateur d'états
    Par Henry Cesbron Lavau dans le forum Outils de restitution et d'analyse
    Réponses: 0
    Dernier message: 02/04/2002, 19h15

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