Mon fichier est 9 Mo et j'ai reçu cette erreur lors du chargement du classeur.
XSSFWorkbook workbook = new XSSFWorkbook(excelFilePath);
cette ligne provoque Java.lang.OutOfMemoryError: Java heap space
Comment puis-je resoudre ceci?
Comme suggéré par d'autres, la première chose à faire est d'augmenter la taille du tas.
Si cela ne vous aide pas ou si vous attendez des fichiers plus gros, vous devez également jeter un coup d'œil à cette réponse: Traitement de grand fichier XLSX en Java
Il donne quelques bons points de départ sur ce qui peut être fait si le mode "Lire tout" standard ne fonctionne pas pour vous.
Lorsque vous écrivez de gros fichiers:
Ce dont vous avez besoin est SXSSF (Streaming usermodel API).
SXSSF (emballage: org.apache.poi.xssf.streaming) est une extension de streaming compatible API de XSSF à utiliser lorsque de très grandes feuilles de calcul doivent être produites et que l'espace de démarrage est limité.
Il y a aussi un exemple sur cette page: vous devez remplacer XSSFWorkbook
avec SXSSFWorkbook
.
Copié cette réponse de - Vadchen , de ne autre question . Cela a fonctionné pour moi. J'ai juste besoin de remplacer XSSFWorkbook
pour SXSSFWorkbook
dans le code, comme il l'a dit.
Je pense qu'un JVM 32 bits a un maximum de 2 Go de mémoire. Ce n'est peut-être pas obsolète. Si je comprenais correctement, vous définissez le lanceur -xmx sur Eclipse. Si vous souhaitez augmenter la mémoire du programme que vous exécutez à partir d'Eclipse, vous devez définir -xmx dans les "configurations d'exécution de l'exécution ..." (sélectionnez votre classe et ouvrez l'onglet Arguments Mettez-le dans le VM Zone d'arguments) Menu, et pas sur la startup Eclipse
EDIT: Détails que vous avez demandé. à Eclipse 3.4
1) Run-> Exécuter des configurations ...
2) Si votre classe n'est pas répertoriée dans la liste de gauche dans la sous-arbitre "Application Java", cliquez sur "Nouvelle configuration de lancement" dans le coin supérieur gauche
2b) à droite, onglet "Main" Assurez-vous que le projet et la classe sont les bons
3) Sélectionnez l'onglet "Arguments" à droite. Celui-ci a deux zones de texte. L'une est destinée aux arguments de programme qui entrent dans le tableau ARGS [] fourni à votre méthode principale. L'autre est pour les arguments VM. Mettez dans celui avec les arguments VM (Basse-One IIRC), ce qui suit: -XMX2048M
Je pense que 1024 m devrait être plus que suffisant pour ce dont vous avez besoin!
4) Cliquez sur Appliquer, puis cliquez sur Exécuter
Au cas où il fonctionne toujours hors de l'espace de tas, vous pouvez toujours modifier le nombre à une valeur supérieure, par exemple, vous pouvez mettre -xmx4g qui ajoute de 2 gigaoctets à 4 gigaoctets
Augmentez la taille du tas comme tel:
-XMS256M -XMX512M -XX: Permsize = 64M -XX: maxpermsize = 1000m
Ces valeurs doivent être fournies à la VM.
Jetez un coup d'œil au lien avec lequel cela devrait vous aider à sortir
http://www.javabeat.net/tips/192-javalangoutofMemoryError-java-heap-space.html