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

avec Java Discussion :

allocation mémoire sans la JVM


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2008
    Messages : 46
    Points : 22
    Points
    22
    Par défaut allocation mémoire sans la JVM
    Bonjour!

    J'utilise dans mon code des fichiers Excel d'entrée et de sortie types. Pour ne pas prendre le risque de corrompre ce fichier de sortie type, je le copie brutalement avec l'API JExcel, or il est assez gros (presque 13Mo). Mon code ne se lance même pas, car le code bloque sur cette copie qui est trop grosse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    public Simulation(String myFile) 
    	throws java.io.IOException, jxl.read.biff.BiffException, jxl.write.WriteException {
     
     
    	//---------
    	// Création du fichier de sortie:
    	//---------
     
    	Workbook outputtype = Workbook.getWorkbook(new File("Output type - Type277 (NE PAS MODIFIER).xls"));
     
        	WritableWorkbook output = Workbook.createWorkbook(new File("Output - Type277 simulation.xls"), outputtype);
     
        	outputtype.close();
     
    ...
     
    }

    J'ai l'erreur :


    Warning: Cannot read name ranges for T - setting to empty
    Warning: Cannot read name ranges for Type - setting to empty
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at jxl.read.biff.FormulaRecord.<init>(FormulaRecord.java:157)
    at jxl.read.biff.SheetReader.read(SheetReader.java:629)
    at jxl.read.biff.SheetImpl.readSheet(SheetImpl.java:686)
    at jxl.read.biff.WorkbookParser.getSheet(WorkbookParser.java:252)
    at jxl.write.biff.WritableWorkbookImpl.copyWorkbook(WritableWorkbookImpl.java:934)
    at jxl.write.biff.WritableWorkbookImpl.<init>(WritableWorkbookImpl.java:334)
    at jxl.Workbook.createWorkbook(Workbook.java:339)
    at jxl.Workbook.createWorkbook(Workbook.java:320)
    at Simulation.<init>(Simulation.java:37)
    at Simulation.main(Simulation.java:163)

    Process completed.



    Je sais qu'il est possible d'allouer plus de memoire via une commande -Xms ou -Xmx dans JVM mais je voudrais que cette allocation soit automatique, donc dans le code.... Est-ce possible?

    Sinon, je devrais créer un plus petit fichier sans mise en forme, qui ne nécessite pas de copie, pour ensuite venir mettre les valeurs de l'un dans une copie manuelle de l'autre.... ca commence a devenir compliqué pour l'équipe de flemmards pour qui je m'efforce de coder ce petit logiciel!!

    Je ne vois pas d'autres solutions.... ?

    Merci!

    Lydia

  2. #2
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par hazyscl Voir le message

    Je sais qu'il est possible d'allouer plus de memoire via une commande -Xms ou -Xmx dans JVM mais je voudrais que cette allocation soit automatique, donc dans le code.... Est-ce possible?
    Lydia
    C'est automatique. -Xmx dit simplement à la jvm quelle taille maximum ton process est autorisé à requérir. Ca ne veux pas dire que cette taille sera d'office allouée. Par défaut, java va toujours tenter un garbage collect avant d'agrandir sa taille d'allocation, donc pas d'inquiétude à avoir là dessus....

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2008
    Messages : 46
    Points : 22
    Points
    22
    Par défaut
    Oui, mais il faut ecrire cette ligne a chaque fois qu'on utilise le process... non? En tout cas d'un ordi a lautre etc... N'y a-t-il pas un moyen d'insérer cette commande dans le code?

  4. #4
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    non, parce que justement çà controle la jvm, dans laquelle tournera ton code. Si çà t'ennuie à ce point, tu met un .bat qui exécute java avec les arguments nécessaire.
    Avec les version récentes de java, la taille max par défaut de la heap dépend de la taille système disponible.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2008
    Messages : 46
    Points : 22
    Points
    22
    Par défaut
    ok jai compris
    je vais essayer de creer un .bat pour voir
    merci beaucoup pour cette reponse!!

    Lydia

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2008
    Messages : 46
    Points : 22
    Points
    22
    Par défaut .bat qui ne fait rien!!
    Jai créé le . bat suivant:

    java -Xms10m -Xmx100m -classpath jxl.jar Output_type_-_Type277_(NE_PAS_MODIFIER).xls
    java Simulation2

    qui est, d'après ce que j'ai compris, censé lancer la simulation au meme titre qu'un "Run" de Simulation2.java depuis JCreator. Pourtant, sous JCreator j'ai bien la creation d'un fichier, qui prend du temps certes mais qui fonctionne, alors que le .bat s'ouvre se referme et semble ne rien faire du tout !?!

    J'ai encore oublié qqc?

    Je suis désolée de vous embeter avec ca, c'est la premiere fois que je ne fais pas que coder brutalement pour mon propre usage ponctuel et que j'ai besoin de faire un packaging propre, alors je suis completement perdue, meme avec les tuto entre les mains!!



    Autre question, encore...
    Avec un .bat peut-on demander à l'utilisateur d'entrer le path du tableur de données, et si oui comment? ou faut-il creer une fonction qui fasse apparaitre une boite de dialogue et recuperer la donnée comme ca (theoriquement parsk je ne sais pas faire non plus ) ?

    Merci infiniment pour votre aide précieuse!!

    Lydia

  7. #7
    Membre du Club

    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par hazyscl Voir le message
    Jai créé le . bat suivant:

    java -Xms10m -Xmx100m -classpath jxl.jar Output_type_-_Type277_(NE_PAS_MODIFIER).xls
    java Simulation2



    Lydia
    Je te conseille de tenter les lignes de code dans un prompt (invite de commande) afin de voir l'éventuelle erreur qui s'affiche. Ou bien tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    java -Xms10m -Xmx100m -classpath jxl.jar Output_type_-_Type277_(NE_PAS_MODIFIER).xls
    java Simulation2
    pause
    Ainsi tu auras le temps de voir le message d'erreur. Il y a des chance que ton fichier Output_type_-_Type277_(NE_PAS_MODIFIER).xls ne soit pas placé au bon endroit. La commande java va chercher le fichier à la racine (à coté de ton .jar) alors que ton outil de développement peut aller le chercher à un autre endroit (racine du projet). Je te conseille de mettre le chemin complet de ton fichier Excel (C:/.../Output....xls)
    Bon courage.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Salut,

    Citation Envoyé par hazyscl Voir le message
    Jai créé le . bat suivant:

    java -Xms10m -Xmx100m -classpath jxl.jar Output_type_-_Type277_(NE_PAS_MODIFIER).xls
    java Simulation2
    Ce qui me parait bizarre c'est que la première commande java ne lance aucun programme java mais un fichier excel et que ensuite tu lances Simulation2 sans classpath ni argument... Je pense que ce que tu cherches à faire est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java -Xms10m -Xmx100m -classpath jxl.jar Simulation2 Output_type_-_Type277_(NE_PAS_MODIFIER).xls

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

Discussions similaires

  1. problème d'allocation de mémoire pour la JVM
    Par Sfaxiano dans le forum Général Java
    Réponses: 13
    Dernier message: 06/05/2010, 21h16
  2. Limite Allocation Mémoire d'un tableau d'entier
    Par l9ft b9hind dans le forum C++
    Réponses: 5
    Dernier message: 27/10/2005, 20h29
  3. Allocation mémoire
    Par DestyNov@ dans le forum C++
    Réponses: 9
    Dernier message: 23/08/2005, 09h09
  4. [Pointeur] Allocation mémoire
    Par Rayek dans le forum Langage
    Réponses: 22
    Dernier message: 20/05/2005, 11h26
  5. Allocation mémoire dynamique
    Par ITISAR dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/01/2005, 10h59

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