Augmenter la taille du segment de mémoire en Java

276

Je travaille sur un serveur Windows 2003 (64 bits) avec 8 Go de RAM. Comment puis-je augmenter la mémoire maximale du tas? J'utilise le -Xmx1500mdrapeau pour augmenter la taille du tas à 1500 Mo. Puis-je augmenter la mémoire du tas à 75% de la mémoire physique (6 Go de tas)?

Sunil
la source
2
As-tu essayé -Xmx6g? Cela n'a-t-il pas fonctionné? Qu'avez-vous observé?
oxbow_lakes
2
Je suppose que vous avez essayé d'augmenter le tas mais avez échoué? Utilisez-vous une JVM 64 bits?
Bart Kiers
Merci pour le commentaire mais cela ne fonctionne pas
Sunil
Eh bien - comment savez-vous que cela ne fonctionne pas? La JVM ne démarre-t-elle pas?
oxbow_lakes

Réponses:

327

Vous pouvez augmenter jusqu'à 4 Go sur un système 32 bits. Si vous utilisez un système 64 bits, vous pouvez aller plus haut. Pas besoin de s'inquiéter si vous avez mal choisi, si vous demandez 5g sur un système 32 bits, java se plaindra d'une valeur invalide et quittera.

Comme d'autres l'ont posté, utilisez les drapeaux de ligne cmd - par exemple

java -Xmx6g myprogram

Vous pouvez obtenir une liste complète (ou une liste presque complète, de toute façon) en tapant java -X.

Steve B.
la source
16
D'après mon expérience, la taille réelle du tas que Java acceptera d'utiliser une machine virtuelle 32b (sur un système 32b ou 64b - la machine virtuelle est la partie importante, ici), est d'environ 2G. En outre, le demandeur surpris n'a pas d'abord recherché et trouvé: stackoverflow.com/questions/1596009/… et: stackoverflow.com/questions/37335/…
wsorenson
2
ah, vous avez raison bien sûr - sur un système 32 bits, vous ne pouvez adresser que 2 Go de mémoire.
Steve B.
Est-il nécessaire que la taille maximale du tas et la taille minimale du tas soient identiques?
user1747935
1
Non, mais les gens le font généralement car la JVM ne peut jamais perdre de temps à redimensionner. Doute que cela compte beaucoup, TBH.
Steve B.
1
@PhilipRego vous le définissez comme vous le souhaitez, jusqu'aux limites que la JVM peut traiter. -Xmx2G définit votre mémoire sur 2G (regardez également -Xms). Cela ne dit rien du tout sur la quantité de mémoire dont vous aurez besoin.
Steve B.
155

Il est possible d'augmenter la taille de segment de mémoire allouée par la JVM en utilisant les options de ligne de commande Nous avons ici 3 options

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size

java -Xms16m -Xmx64m ClassName

Dans la ligne ci-dessus, nous pouvons définir le segment minimum à 16 Mo et le segment maximum 64 Mo

Karthik Reddy
la source
28

Sur une machine virtuelle Java 32 bits, la plus grande taille de tas que vous pouvez théoriquement définir est de 4 Go. Pour utiliser une taille de segment plus grande, vous devez utiliser une machine virtuelle Java 64 bits. Essayez ce qui suit:

java -Xmx6144M -d64

L'indicateur -d64 est important car il indique à la JVM de s'exécuter en mode 64 bits.

Kevin
la source
Merci patron mais ça ne marche pas dans mon système il y a autre chose qui me manque
Sunil
4
Définissez "ne fonctionne pas". Cela ne démarre pas et vous donne une erreur? Est-ce qu'il démarre mais utilise une taille de tas différente?
Kevin
11

Il est possible d'augmenter la taille de segment de mémoire allouée par la machine virtuelle Java dans eclipse directement Dans eclipse IDE goto

Exécuter ----> Exécuter les configurations ----> Arguments

Entrez -Xmx1g (Il est utilisé pour définir la taille maximale comme Xmx256m ou Xmx1g ...... m -> mb g ---> gb)

Karthik Reddy
la source
3
Juste pour ajouter ceci devrait être un argument VM (eclipse vous donne deux options).
Matt Boyle
11

java -d64 -Xms512m -Xmx4g HelloWorld

où, -d64: active la JVM 64 bits -Xms512m: définit la taille de segment initiale à 512 Mo -Xmx4g: définit la taille maximale de segment à 4 Go (ici le nom du fichier java est: HelloWorld.java)

Sumit Deshinge
la source
9

Vous pouvez augmenter la taille du tas en passant les paramètres JVM -Xms et -Xmx comme ci-dessous:

Pour les fichiers Jar:

java -jar -Xms4096M -Xmx6144M jarFilePath.jar

Pour les fichiers Java:

 java -Xms4096M -Xmx6144M ClassName

Les paramètres ci-dessus augmentent le InitialHeapSize (-Xms) à 4 Go (4096 Mo) et MaxHeapSize (-Xmx) à 6 Go (6144 Mo).

Mais, la taille de segment de mémoire de la jeune génération restera la même et la taille de segment de mémoire supplémentaire sera ajoutée à la taille de segment de mémoire de l' ancienne génération . Pour égaliser la taille du segment de mémoire de la jeune génération et du segment de mémoire de la vieille génération , utilisez -XX: NewRatio = 1 -XX: -UseAdaptiveSizePolicy params.

java -jar -Xms4096M -Xmx6144M -XX:NewRatio=1 -XX:-UseAdaptiveSizePolicy pathToJarFile.jar

-XX: NewRatio = Old Gen Heap Size: Young Gen HeapSize (Vous pouvez jouer avec ce ratio pour obtenir le ratio souhaité).

Sahil Chhabra
la source
7

Puis-je augmenter la mémoire du tas à 75% de la mémoire physique (tas de 6 Go).

Oui, vous pouvez. En fait, si vous le souhaitez, vous pouvez augmenter jusqu'à plus que la quantité de mémoire physique.

Que ce soit une bonne idée de le faire dépend de la quantité d’activités exécutées sur votre système. En particulier, si le "jeu de travail" des applications et services en cours d'exécution dépasse considérablement la mémoire physique disponible, votre système est susceptible de "se vider", passant beaucoup de temps à déplacer des pages de mémoire virtuelle vers et depuis le disque. L'effet net est que le système devient horriblement lent.

Stephen C
la source
Merci pour votre commentaire Mais comment puis-je augmenter.Plz pouvez-vous donner la commande.
Sunil
Essayez -Xmx6000m. Cela devrait fonctionner si vous utilisez une version 64 bits de Java.
Stephen C
3
Êtes-vous sûr que vous exécutez une version 64 bits de Java? Sur un système d'exploitation 64 bits?
Stephen C
4

Veuillez utiliser la commande ci-dessous pour changer la taille du tas à 6 Go

export JAVA_OPTS="-Xms6144m -Xmx6144m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m"
Baum mit Augen
la source
Si j'ai de la mémoire 8G dans mon système et que je peux voir dans le gestionnaire de tâches que 70% de celui-ci est toujours utilisé; est-il possible d'allouer de la mémoire 6G à la taille du tas java?
Reihan_amn
1
@Reihan_amn Oui et non, si vous dépassez votre mémoire, cela ira à la pagination, qui est sur le disque et incroyablement lente. Si vous dépassez les fichiers de page, vous êtes dans un mauvais moment.
CodeMonkey
2

Plusieurs personnes ont souligné les réponses spécifiques à la taille du tas avec les options jvm de -Xmset -Xms. Je tiens à souligner que ce n'est pas le seul type d'options de mémoire pour le jvm. Plus précisément, si vous obtenez des empilements de pile, vous souhaiterez augmenter la taille de la pile en ajoutant une option supplémentaire comme -Xss8m.

Pour ce problème, les options jvm de quelque chose comme -Xms2g -Xmx6g -Xss8mseraient une solution.

Je partage ces informations car mes recherches Google sur la façon d'augmenter la mémoire jvm m'ont amené à cette solution, et les solutions ne fonctionnaient pas avec des quantités élevées d'allocation de mémoire. Une fois que j'ai compris à quoi servaient les paramètres spécifiques, j'ai pu sur Google comment augmenter la taille de la pile et j'ai trouvé le paramètre manquant. :) J'espère que cela fait gagner du temps aux autres, comme cela m'aurait fait gagner une tonne de temps. :)

James Oravec
la source
2

Cela ne fonctionne qu'avec la version 64 bits de Java. Accédez au Panneau de configuration et cliquez sur l'icône Java. Dans la petite fenêtre du panneau de configuration Java, cliquez sur la barre de menus Java, puis sur le viewbouton.

Si vous avez deux plates-formes Java, désactivez la version précédente de Java, puis cliquez sur le champ de texte Paramètres d'exécution et écrivez -Xmx1024mou moins que la taille de la RAM. N'augmentez pas la taille du tas égale à la RAM sinon votre système va planter.

madhu
la source
Si vous rendez la taille du tas égale à la RAM, le système ne se bloquera pas. Au lieu de cela, le système commencera la pagination et deviendra agréable et lent.
DaveTheMinion
0

Oui. Vous pouvez.

Vous pouvez augmenter votre mémoire en tas à 75% de la mémoire physique (6 Go de tas) ou plus.

Étant donné que vous utilisez 64 bits, vous pouvez augmenter la taille de votre tas à la quantité souhaitée. Dans le cas où vous utilisez 32 bits, il est limité à 4 Go.

$ java -Xms512m -Xmx6144m JavaApplication

Vous définit avec une taille de tas initiale de 512 Mo et une taille de tas maximale de 6 Go.

J'espère que ça aide.. :)

Sarat Chandra
la source
Cela semble très similaire aux deux réponses les plus votées publiées quelques années plus tôt.
Bernhard Barker
0

J'ai un problème lors de l'exécution des fichiers py dans mon code java à l'aide d'eclipse / STS, obtenant PyException en raison d'une mémoire de tas jvm insuffisante. J'ai effectué les modifications comme mentionné ci-dessous et je suis en mesure de résoudre ce problème. Voici ma configuration système.

entrez la description de l'image ici

Et ce sont les changements que j'ai faits dans mon espace de travail et le tour est joué maintenant.

entrez la description de l'image ici entrez la description de l'image ici

mannedear
la source