2010-11-02 10 views
2

J'utilise 32 bits win.7 et j'utilise Eclipse. Ayant également 4 Go de RAM. Je veux allouer à mon application java un maximum de 3 Go environ, mais je peux allouer au maximum 1,5 Go via les arguments VM -Xmx1056m.JVM Heapsize sur OS 32 bits

Que dois-je faire? Si j'installe un 64 bits win.7. il serait alors capable d'allouer 3 Go de taille à mon application?

Répondre

2

Vous avez besoin d'un système d'exploitation 64 bits et d'une machine virtuelle 64 bits pour allouer autant de RAM.

-2

Vous aurez besoin non seulement d'un système d'exploitation 64 bits et d'une machine virtuelle 64 bits, mais également de plus de mémoire.

Sur un système Windows 32 bits, l'espace d'adressage virtuel est divisé par 2 Go pour les opérations du noyau et 2 Go pour les applications utilisateur. Alors tu es foutu.

Il y a une solution possible, mais très peu probable: vous pouvez enable le /3GB switch de soulever cette limitation et que le système alloue 1 Go d'espace d'adressage virtuel pour les opérations du noyau et 3Go pour les applications utilisateur (si elles sont /LARGEADDRESSPACEAWARE).

Malheureusement, la JVM Sun/Oracle HotSpot 32 bits n'est pas LARGEADDRESSAWARE (que je connais), et les autres JVM 32bits ne le sont probablement pas non plus. Mais pensez-y: même si vous étiez capable de le faire, vous utiliseriez toute la mémoire disponible pour votre système. Rien de ne sera laissé pour d'autres programmes après que vous ayez alloué vos 3 Go de tas pour votre JVM. Votre système passerait sur le disque tout le temps. Ce serait inutilisable. Il suffit d'obtenir un OS 64bis avec plus de mémoire vive (RAM). C'est tout ce qu'il y a pour vous, à court de trouver des moyens pour que votre programme utilise moins de mémoire.

+0

Hmm, pourquoi? Est-ce que quelque chose de vraiment ** faux ** dans ma réponse ?? – haylem

+0

Merci pour vos réponses, j'installerai JVM 64 bits win7 et 64 bits sur mon pc et ensuite définir les arguments VM. non seulement ~ ram 3 Go mais plus grand que 2 Go, je travaille sur la visualisation graphique à grande échelle. donc je pense que sur 4Go Ram je vais donner ~ 2.5Go ram comme argument -Xmx. Furrther vous le fera savoir. quelqu'un d'autre peut-il me fournir des arguments d'optimisation dans le fichier eclipse.ini? – Aijaaz

+0

En outre, j'ai visité des forums, où ils ont discuté de différents paramètres d'optimisation qui doivent être ajoutés dans le fichier eclipse.ini. Je préférerais que quelqu'un me fournir une liste optimisée consolidée pf arguments this vm. – Aijaaz

-1

Je n'ai pas le lien pour le moment qui décrit le processus de gestion de la mémoire JVM. La limitation que vous avez trébuché sur est une limitation de la façon dont Java effectue la récupération de place. Le tas de mémoire Java doit être un bloc contigu. Les algorithmes de récupération de place ont été optimisés pour cette limitation de conception afin qu'ils puissent fonctionner efficacement. Dans un système d'exploitation 32 bits, vous ne contrôlez pas les adresses mémoire dans lesquelles les pilotes de périphériques sont chargés. Sous Windows, le système d'exploitation ne réalloue que l'adresse de base du pilote de périphérique stockée dans la DLL si elle est en conflit avec un code déjà chargé. D'autres systèmes d'exploitation peuvent réallouer tous les pilotes de périphériques en charge afin qu'ils vivent dans un bloc contigu près du noyau. En principe, la limitation est la même pour les systèmes d'exploitation 64 bits et 32 ​​bits. C'est juste sur un OS 64 bits qu'il y a plusieurs autres plages d'adresses à choisir. Assurez-vous d'utiliser une JVM 64 bits pour correspondre au système d'exploitation. C'est pourquoi le système d'exploitation 64 bits est capable de trouver un plus grand bloc d'adresses mémoire contigus que le système d'exploitation 32 bits.

EDIT: De plus, la JVM 32 bits a une taille maximale de 2 Go.

RÉFÉRENCE:

http://publib.boulder.ibm.com/infocenter/javasdk/tools/index.jsp?topic=/com.ibm.java.doc.igaa/_1vg00014884d287-11c3fb28dae-7ff6_1001.html

Java maximum memory on Windows XP

http://forums.sun.com/thread.jspa?messageID=2715152#2715152

+0

Non, il est limitatif d'essayer de compresser la JVM, le tas Java, le tas JVM, les piles de threads, les fichiers JAR mappés en mémoire, les bibliothèques partagées et les segments de données divers dans cette partie d'un espace d'adressage 32 bits. le système d'exploitation. – Anon

+0

Ce n'est pas une limite de machine virtuelle, mais une limite de système d'exploitation. La VM d'Oracle pour Solaris est par ex. capable de gérer des tas jusqu'à ~ 3,5 Go, puisque Solaris 32 bits permet à chaque processus d'adresser 4 Go (et pas seulement 2 Go sous Windows et Linux). – jarnbjo

+0

J'ai déjà étudié cela pour l'hébergement d'applications web. C'est à la fois une limite de la JVM et du système d'exploitation. Les faits sont que la JVM nécessite des blocs contigus de RAM, et YMMV pour la taille du plus grand bloc contigu de RAM sur votre machine. –

3

Un processus Windows 32 bits régulière ne peut répondre à 2 Go de mémoire, même si vous avez plus de mémoire disponible. Vous pouvez trouver les limites de mémoire pour différentes versions de Windows here.

Étant donné que la machine virtuelle a besoin de mémoire pour plus de choses que le segment de mémoire, la taille de segment de mémoire maximale sera légèrement inférieure à la mémoire maxmimum disponible pour le processus. Habituellement, vous pouvez régler le tas jusqu'à environ 1,6 Go pour une machine virtuelle Windows 32 bits.

+1

REMARQUE: Windows Server 2003 dispose d'un commutateur permettant d'activer jusqu'à 3 Go (3 Go). Voir http://www.microsoft.com/whdc/system/platform/server/pae/paemem.mspx –

Questions connexes