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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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
    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
    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 averti
    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
    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
    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
    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 averti
    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
    Par défaut
    ok jai compris
    je vais essayer de creer un .bat pour voir
    merci beaucoup pour cette reponse!!

    Lydia

  6. #6
    Membre averti
    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
    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

+ 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, 20h16
  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, 19h29
  3. Allocation mémoire
    Par DestyNov@ dans le forum C++
    Réponses: 9
    Dernier message: 23/08/2005, 08h09
  4. [Pointeur] Allocation mémoire
    Par Rayek dans le forum Langage
    Réponses: 22
    Dernier message: 20/05/2005, 10h26
  5. Allocation mémoire dynamique
    Par ITISAR dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/01/2005, 09h59

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