97 votes

L'augmentation de la taille maximale du tas de la JVM pour les applications gourmandes en mémoire

J'ai besoin d'exécuter une application Java de mémoire intensive des applications qui utilise plus de 2 go, mais je vais avoir des problèmes pour augmenter le tas de la taille maximale. Jusqu'à présent, j'ai essayé l'une des approches suivantes:

  • Réglage de l'-Xmx paramètre, par exemple -Xmx3000m. Cette approches échoue à la création de la JVM. De ce que j'ai cherché sur google, il semble que l'-Xmx doit être inférieure à 2 GO.

  • À l'aide de la -XX:+AggressiveHeap option. Quand j'ai essayer cette approche, je reçois un "Pas assez de mémoire' erreur qui indique que la taille du segment de mémoire est 1273.4 MO, même si mon ordinateur a 8 go de mémoire.

Est-il une autre approche que je peux essayer d'augmenter la taille maximale du tas de la JVM? Voici un résumé de l'ordinateur spécifications:

  • Système d'exploitation: Windows 7 (64 bits)
  • Processeur: Intel Core i7 (2.66 GHz)
  • Mémoire: 8 GO
  • java -version:
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)

106voto

mohitsoni Points 872

Lorsque vous êtes à l'aide de la JVM en mode 32 bits, la taille maximale du tas qui peut être alloué est de 1280 MO. Donc, si vous voulez aller au-delà de cela, vous avez besoin d'invoquer la JVM 64 mode.

Vous pouvez utiliser les éléments suivants:

$ java -d64 -Xms512m -Xmx4g HelloWorld

où,

  • -d64: Permettra la JVM 64 bits
  • -Xms512m: fixe initiale de la taille de segment de mémoire que 512 MO
  • -Xmx4g: Va définir la taille maximale du tas que 4 GO

Vous pouvez syntoniser -Xms et -Xmx que par les exigences que vous (YMMV)

Une très bonne source d'optimisation des performances de la JVM, ce qui pourrait vouloir examiner: http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html

49voto

GregS Points 16158

Vous obtenez une JVM 64 bits à partir d' Oracle.

15voto

Greg Points 4537

Je crois que la limite de 2 go est pour la version 32 bits de Java. J'ai pensé v1.6 a toujours été de 64 bits, mais essayer de forcer la mode 64 bits, juste pour voir: ajouter l'-d64 option.

8voto

Jean B Points 146

Java 32 bits est limité à environ 1,4 à 1,6 GO.

Oracle 32 bits tas FAQ

Citation

Le montant maximum théorique de segment de limite pour la JVM 32 bits est la 4G. En raison de diverses contraintes supplémentaires telles que le swap disponible, l'espace d'adressage du noyau de l'utilisation, de la fragmentation de la mémoire et de traitement de l'ordinateur virtuel, dans la pratique, la limite peut être beaucoup plus faible. Sur les systèmes Windows 32 bits la taille maximale du tas sera de 1,4 G à 1,6 G. Sur 32 bits Solaris grains de l'espace d'adressage est limitée à la 2G. Sur 64 bits des systèmes d'exploitation 32 bits VM, le max de la taille du segment peut être plus élevé, à l'approche de la 4G sur de nombreux systèmes Solaris.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X