Tableau : java.lang.OutOfMemoryError: Requested array size exceeds VM limit [Résolu]

Messages postés
22
Date d'inscription
jeudi 21 mai 2009
Dernière intervention
1 décembre 2009
- 3 juil. 2009 à 12:07 - Dernière réponse :
Messages postés
22
Date d'inscription
jeudi 21 mai 2009
Dernière intervention
1 décembre 2009
- 3 juil. 2009 à 18:45
Bonjour,
voici mon problème.
Pour effectuer un traitement sur une image, j'ai besoin de récupérer l'ensemble des pixels. Je crée donc un tableau :
  int[] pix= new int[largeurImageSrc * hateurImageSrc];
Le problème est que pour des images trop grande le produit de sa hauteur par sa largeur créer un indice trop important. D'où le message d'erreur :
java.lang.OutOfMemoryError: Requested array size exceeds VM limit.

J'ai lu que ceci signifie que l'application tente d'allouer un tableau plus grand que la taille du heap.

Est-ce que quelqu'un peut m'expliquer comment augmenter la taille du heap (si possible) afin de créer un tableau d'entier plus grand. Ou bien quelqu'un a-t-il une autre solution à proposer à cela ?

J'ajoute qu'il est crucial que le tableau reste un entier.

Merci beaucoup
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Dernière intervention
29 avril 2011
- 3 juil. 2009 à 12:22
3
Merci
Salut,

tu peux définir la taille max avec l'option -Xmx au lancement de la jvm
java -Xmx512M maClasseMain (jvm de 512M max)

Après ce ne sera peut être pas suffisant si ton tableau est vraiment très grand

Merci kirua12 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de kirua12
Meilleure réponse
Messages postés
22
Date d'inscription
jeudi 21 mai 2009
Dernière intervention
1 décembre 2009
- 3 juil. 2009 à 13:47
3
Merci
Salut
merci beaucoup pour ta réponse.
Perso, je travaille sous eclipse, j'ai ajouté cette option dans parametre -VM.
Merci.

Merci cs_heavenboy 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de cs_heavenboy
Meilleure réponse
Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Dernière intervention
29 avril 2011
- 3 juil. 2009 à 16:11
3
Merci
non, aucun risque, tu définis juste la taille mémoire max autorisée pour la JVM. Tu ne peux pas mettre une valeur plus grande que ta mémoire physique totale.
C'est normal que la mémoire augmente, avec ton tableau, tu alloues une grande zone mémoire et quand tu le détruis, le garbage collector fait le ménage et la mémoire utilisée décroit

Merci kirua12 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de kirua12
Messages postés
22
Date d'inscription
jeudi 21 mai 2009
Dernière intervention
1 décembre 2009
- 3 juil. 2009 à 14:56
0
Merci
Salut
grâce à ta réponse sa fonctionne superbement. J'ai mis -Xm2048M. Et je peux faire ainsi un tableau de 477199999 cases. On dira que c'est suffisant.
Merci.
Juste une question pratique. J'ai remarqué que la mémoire vive augmentait énormément lors de la création de ce tableau de 477199999 cases. Elle monte à 2,5 GO puis redescend une fois le tableau créé. Il n'y a aucun risque pour le pc de mettre -Xm2048M plutôt que -Xm512M ?

merci, beaucoup!
Commenter la réponse de cs_heavenboy
Messages postés
22
Date d'inscription
jeudi 21 mai 2009
Dernière intervention
1 décembre 2009
- 3 juil. 2009 à 18:45
0
Merci
En tout cas merci beaucoup pour ton aide très précieuse
Commenter la réponse de cs_heavenboy

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.