Tom's Guide > Forum > Programmation > JExcelApi: java.lang.OutOfMemoryError: Java heap space

JExcelApi: java.lang.OutOfMemoryError: Java heap space

Forum Programmation : JExcelApi: java.lang.OutOfMemoryError: Java heap space

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour à tous,

je programme une application qui demande la manipulation de fichiers Excel assez gros.
Pour ce faire, j'utilise l'API JExcelAPI.

Mon problème est le suivant: certaines pages peuvent contenir 50000 lignes, et ma méthode Workbook.getSheet(), je pense incontournable, me sort une exception
< Exception in thread "main" java.lang.OutOfMemoryError: Java heap space >.

La méthode getSheet(int) charge en mémoire la page sur laquelle je veux travailler, et je ne vois pas de moyen permettant de ne charger qu'une partie de la page.

J'ai essayé d'augmenter la mémoire virtuelle de ma JVM mais le problème subsiste.

Avez-vous une idée?

Merci beaucoup d'avance

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

up pleazzzzz
personne n'a une idée à me proposer?

Merci!

Répondre à towanda@IDN

Tu as mis la mémoire à combien ?

ps: j'ai déjà vu le composant excel crashé dans une appli, alors, faut pas s'attendre à des miracles avec ce machin :D


Message édité par CRicky le 10-03-2007 à 22:31:50
------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

J'ai essayé un peu tout, le max possible, j'ai aussi essayé de changer le nbr de Mo dont la jvm incrémente sa mémoire quand elle en manque. C'est par défaut à 1Mo, j'ai essayé plus et moins.

Mais j'ai l'impression que ma config n'est pas prise en compte quand je lance eclipse en ligne de commande (avec les arguments eclipse -vmargs -Xmx512 par exemple). Encore moins depuis que j'ai installé un autre eclipse, dans un répertoire et un workspace séparés (celui-la sert pour les applis web). Depuis, je n'arrive même plus à lancer eclipse en ligne de commande avec des arguments (ca m'affiche juste l'image de chargement et ça s'arrête), juste un eclipse.exe tout simple.

En ce moment j'ai donc la mémoire à 256Mo et je n'arrive pas à changer la valeur.

Je fais un copier-coller de la config:

*** System properties:
awt.toolkit=sun.awt.windows.WToolkit
eclipse.buildId=M20060921-0945
eclipse.commands=-os
win32
-ws
win32
-arch
x86
-launcher
D:\Program Files\Eclipse\eclipse.exe
-name
Eclipse
-showsplash
600
-exitdata
b1c_790
-vm
D:\Program Files\Java\jdk1.5.0_10\bin\javaw.exe
eclipse.ee.install.verify=false
eclipse.product=org.eclipse.sdk.ide
eclipse.startTime=1173605826796
eclipse.vm=D:\Program Files\Java\jdk1.5.0_10\bin\javaw.exe
eclipse.vmargs=-Xms40m
-Xmx256m
-jar
D:\Program Files\Eclipse\startup.jar
eof=eof
file.encoding=Cp1252
file.encoding.pkg=sun.io
file.separator=\
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.awt.printerjob=sun.awt.windows.WPrinterJob
java.class.path=D:\Program Files\Eclipse\startup.jar
java.class.version=49.0
java.endorsed.dirs=D:\Program Files\Java\jdk1.5.0_10\jre\lib\endorsed
java.ext.dirs=D:\Program Files\Java\jdk1.5.0_10\jre\lib\ext
java.home=D:\Program Files\Java\jdk1.5.0_10\jre
java.io.tmpdir=D:\DOCUME~1\PADMIN\LOCALS~1\Temp\
java.library.path=D:\Program Files\Java\jdk1.5.0_10\bin;.;D:\WINDOWS\system32;D:\WINDOWS;D:\Program Files\Java\jdk1.5.0_10\bin;D:\Oracle\product\10.1.0\Client_3\bin;D:\WINDOWS\system32;D:\WINDOWS;D:\WINDOWS\System32\Wbem;D:\Program Files\Eclipse;d:\Program Files\Microsoft SQL Server\90\Tools\binn\;D:\Program Files\Java\jdk1.5.0_10\bin
java.runtime.name=Java(TM) 2 Runtime Environment, Standard Edition
java.runtime.version=1.5.0_10-b03
java.specification.name=Java Platform API Specification
java.specification.vendor=Sun Microsystems Inc.
java.specification.version=1.5
java.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport.cgi
java.version=1.5.0_10
java.vm.info=mixed mode, sharing
java.vm.name=Java HotSpot(TM) Client VM
java.vm.specification.name=Java Virtual Machine Specification
java.vm.specification.vendor=Sun Microsystems Inc.
java.vm.specification.version=1.0
java.vm.vendor=Sun Microsystems Inc.
java.vm.version=1.5.0_10-b03
line.separator=

Merci!

Répondre à towanda@IDN

As-tu essayé de le lancer en ligne de commande javaw sans passer par eclipse (en précisant seulement les paramètres Xmx512m voire Xms512m) ?
Sinon il y a une option qui affiche le taille des classes: -Xaprof

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

Je viens d'essayer:

javaw -vmargs -Xmx512[m] [-Xms512[m]] -> "Could not create de Java virtual machine

javaw -Xaprof -> rien ne se passe

javaw -vmargs -Xaprof: -> Could not create the Jvm

Répondre à towanda@IDN

javaw -Xmx512m -Xms512m -jar tonFichier.jar
et juste ça ?

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

je suis en cours de développement, donc mon projet n'est pas encore archivé en .jar. Est-ce bien de mes sources que tu parles quand tu dis monFichier.jar?

Je peux toujours essayer,mais ça risque d'être assez lourd si je dois archiver à chaque fois que je veux tester l'appli...

Répondre à towanda@IDN

Oui c'est bien les sources (enfin compilés). mais si tu arrives à l'exécuté c'est que tu l'as compilé.
Si tu n'as que des .class, met la classe qui contient le main:

javaw -Xmx512m -Xms512m tonPackagePersoSIlYEnAUn.MainClass

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

Voila, j'ai essayé:

javaw -Xmx512m -Xms512m lePathDeMonMain\MainClass.class

-> Could not find the main class. Program will exit.


Merci beaucoup pour ton aide

Répondre à towanda@IDN

Joie: j'ai lancé la même commande en remplacant le "javaw" par "eclipse", ça a fonctionné!

Maintenant je vais voir ce que ca donne avec les fichiers excel

Répondre à towanda@IDN

-Xmx20000m
-Xms2000m

et j'ai toujours la même erreur :-(

Mais je l'ai plus vite mdr

Répondre à towanda@IDN

"lePathDeMonMain\MainClass.class" => ici, il faut mettre le nom de ta classe qui contient la méthode classe main.

"-Xmx20000m " => tu as 20Go de RAM ? :)

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

Ouioui, c'est ce que j'ai fait, et avec eclipse -Xmx512m -Xms512m lePathDeMonMain\MainClass.class ca a fonctionné.

Bah j'ai mis un truc énorme, pour voir s'il prenait une valeur maximum.
Il a accepté les 20Go. Mais ça n'a rien changé à mon probleme...
Je peux réessayer avec moins mais je ne pense pas que ca changerait qq chose, avec 512m le probleme subsiste...

Allez, il est qd-meme pas si énorme mon fichier... il doit bien y avoir une astuce... grrr

Répondre à towanda@IDN

Et avec -Xaprof, rien ne s'affiche dans la console ?
Si oui, je ne vois plus quoi faire.

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

Non, ni quand je fais eclipse -Xaprof, ni quand je fais eclipse -Xaprof ...\mainClass.class
Ca ouvre simplement eclipse, sans aucun message supplémentaire.

Quand je fais javaw -Xaprof, il ne reconnait pas la commande.

Tant pis, je me débrouillerai pour trouver la solution,
encore une grand merci à toi Cricky

Répondre à towanda@IDN
Tom's Guide > Forum > Programmation > JExcelApi: java.lang.OutOfMemoryError: Java heap space
Aller à :

Il y a 1899 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens