web-dev-qa-db-fra.com

Augmentation de la taille de segment maximale de la machine virtuelle Java pour les applications nécessitant beaucoup de mémoire

Je dois exécuter une application gourmande en mémoire Java, qui utilise plus de 2 Go, mais je rencontre des problèmes pour augmenter la taille maximale du tas. Jusqu'à présent, j'ai essayé les approches suivantes:

  • Définition du paramètre -Xmx, par exemple -Xmx3000m. Cette approche échoue lors de la création de la machine virtuelle Java. D'après ce que j'ai vu sur Google, il semble que -Xmx doit faire moins de 2 Go.

  • Utilisation de - XX: option + AggressiveHeap . Lorsque j'essaie cette approche, une erreur "Mémoire insuffisante" s'affiche, indiquant que la taille du segment de mémoire est de 1 273,4 Mo, bien que mon ordinateur dispose de 8 Go de mémoire.

Existe-t-il une autre approche permettant d’augmenter la taille maximale du segment de mémoire de la machine virtuelle Java? Voici un résumé des spécifications de l'ordinateur:

  • 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)
83
Alceu Costa

Procurez-vous une machine virtuelle Java 64 bits auprès de Oracle .

46
James K Polk

Lorsque vous utilisez la machine virtuelle Java en mode 32 bits, la taille de segment de mémoire maximale pouvant être allouée est de 1 280 Mo. Donc, si vous voulez aller plus loin, vous devez appeler JVM en mode 64.

Vous pouvez utiliser ce qui suit:

$ Java -d64 -Xms512m -Xmx4g HelloWorld

où,

  • -d64: activera la JVM 64 bits
  • -Xms512m: définira une taille de tas initiale de 512 Mo
  • -Xmx4g: définira une taille de tas maximale de 4 Go

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

Une très bonne ressource sur le réglage des performances de la machine virtuelle Java, qui pourrait vous intéresser: http://Java.Sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html

91
mohitsoni

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

14
G__

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

FAQ sur le tas Oracle 32 bits

Citation

La limite de segment théorique maximale pour la machine virtuelle Java 32 bits est 4G. En raison de diverses contraintes supplémentaires telles que le swap disponible, l'utilisation de l'espace d'adressage du noyau, la fragmentation de la mémoire et VM - surcharge, dans la pratique, la limite peut être beaucoup plus basse. Sur la plupart des systèmes Windows 32 bits modernes, la taille maximale du segment de mémoire va de 1,4 à 1,6 Go. Sur les noyaux 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 plus élevée et s'approcher de la 4G sur de nombreux systèmes Solaris.

8
Jean B

Ci-dessous conf fonctionne 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 "$@"
3
tutorialbyexample