Augmentation de la taille de segment de mémoire maximale de la JVM pour les applications gourmandes en mémoire

J’ai besoin d’exécuter une application Java intensive utilisant plus de 2 Go, mais j’ai des problèmes pour augmenter la taille maximale du tas. Jusqu’à présent, j’ai essayé les approches suivantes:

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

  • OS: 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) 

Procurez-vous une JVM 64 bits d’ Oracle .

Lorsque vous utilisez JVM en mode 32 bits, la taille maximale de segment de mémoire pouvant être allouée est de 1280 Mo. Donc, si vous voulez aller au-delà, vous devez appeler JVM en mode 64.

Vous pouvez utiliser les éléments suivants:

 $ java -d64 -Xms512m -Xmx4g HelloWorld 

où,

  • -d64: permettra d’activer la machine virtuelle Java 64 bits
  • -Xms512m: définira la taille de segment de mémoire initiale à 512 Mo
  • -Xmx4g: définira une taille de segment maximale de 4 Go

Vous pouvez accorder -Xms et -Xmx selon vos exigences (YMMV)

Une très bonne ressource sur le réglage des performances de la machine virtuelle Java (JVM), que vous pouvez consulter: http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html

Je crois que la limite de 2 Go est pour Java 32 bits. Je pensais que la version 1.6 était toujours en 64 bits, mais essayez de forcer le mode 64 bits juste pour voir: ajoutez l’option -d64.

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

FAQ sur le tas Oracle 32 bits

Citation

La limite maximale de tas théorique pour la JVM 32 bits est 4G. En raison de diverses contraintes supplémentaires telles que le swap disponible, l’utilisation de l’espace adresse du kernel, la fragmentation de la mémoire et la surcharge de la machine virtuelle, dans la pratique, la limite peut être beaucoup plus faible. Sur la plupart des systèmes Windows 32 bits modernes, la taille de segment maximale sera comprise entre 1,4 et 1,6 Go. Sur les kernelx Solaris 32 bits, l’espace d’adressage est limité à 2G. Sur les systèmes d’exploitation 64 bits exécutant la machine virtuelle 32 bits, la taille maximale du segment de mémoire peut être supérieure à celle de 4G sur de nombreux systèmes Solaris.

Ci-dessous conf travaille pour moi:

 JAVA_HOME=/JDK1.7.51-64/jdk1.7.0_51/ PATH=/JDK1.7.51-64/jdk1.7.0_51/bin:$PATH export PATH export JAVA_HOME JVM_ARGS="-d64 -Xms1024m -Xmx15360m -server" /JDK1.7.51-64/jdk1.7.0_51/bin/java $JVM_ARGS -jar `dirname $0`/ApacheJMeter.jar "$@"