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)
- BTW: le minimum et Le maximum de la taille de la mémoire sont maintenant des options standard. Vous pouvez utiliser ms et -mx au lieu de -Xms et -Xmx. -X?? est réservé pour les options non standard.
- Standard pour laquelle la JVM? Ils sont encore non-standard pour la JVM HotSpot (à compter de 1.8). Voir docs.oracle.com/javase/8/docs/technotes/tools/unix/...
- -mx et-ms existe et fonctionne, mais je ne le trouve pas dans officiel la documentation java @PeterLawrey > pouvez-vous ajouter un lien vers de la documentation? Merci
- c'est de la compatibilité descendante avec Java 1.1. Je l'ai vu documenté pour cette version, mais pourrait être difficile à trouver maintenant. 😉
- Merci @PeterLawrey pour une explication. Mais quand tu dis que c'est maintenant la norme vous dire que c'est la norme à partir de Java 1.1 (mais pas dans les versions ultérieures)? Me semble bizarre 🙂 btw, j'ai trouvé un lien sur Java 1.1 documentation et vous avez raison: ad.ntust.edu.tw/cours/ad5601701/jmdl/docs/java/tooldocs/win32/...
Vous devez vous connecter pour publier un commentaire.
Vous obtenez une JVM 64 bits de Oracle.
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 la suite:
où,
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
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.
Java 32 bits est limité à environ 1,4 à 1,6 GO.
Oracle 32 bits tas FAQ
Devis
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, espace d'adressage du noyau de l'utilisation, de 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.
Ci-dessous conf qui fonctionne pour moi:
j'ai "similaires" des problèmes de mémoire pour analyser un 400mb fichier json via le JSONReader nœud.
j'ai augmenté -Xmx12228m dans le knime.ini, mais le tas de l'espace semble être plafonné à 5462mb
mon ordinateur portable a 16 go de ram, ce qui devrait être suffisant, non?
-->les détails de l'installation: knime_3.6.2\plugins/org.knime.binary.jre.win32.x86_64_1.8.0.152-01/jre/bin\server\jvm.dll
Thx,
H