La compréhension max JVM taille de segment de mémoire - 32 bits vs 64 bits
J'ai lire le max de la taille du segment sur Windows 32 bits est de ~1,5 GO qui est due à le fait que la JVM nécessite de la mémoire contiguë. Quelqu'un peut m'expliquer le concept de "mémoire contiguë" et pourquoi vous n'avez max 1,5 GO sur Windows?
Deuxièmement, quel est le max de la taille du segment sur Windows 64 bits et pourquoi est-ce différent que ce qui est disponible sur 32 bits?
- La limite de jvm 32 bits sur un 32-bit OS varie de 1,2 GO (certaines versions de Windows) à 2,0 GO (Solaris). Jvm 32 bits sur 64 bits Solaris pouvez obtenir 4 GO. Je pense que le maximum de la jvm 64 bits sur 64 bits de Windows est 32 GO.
- Je m'attendais à une JVM 32 bits sur 64 bits Win7 pour être en mesure d'obtenir 4 GO - mais ce n'est pas le cas - c'est ceux 1,5 GO again... (JDK5)
Vous devez vous connecter pour publier un commentaire.
La 32-bits/64-bits de la partie est sans rapport avec Java
Il s'avère que les emplacements de la mémoire dans un système 32 bits sont référencés par des non signé de 32 bits entiers. Cela permet jusqu'à 2^32 possible emplacements de mémoire. Depuis chaque emplacement des magasins de 1 octet 2^32 octets ou 4 GO si vous préférez.
Sur un système 64 bits il y a 2^64 emplacements, ou 16 exaoctets.
Maintenant, dans Windows, la zone contiguë de la partie devient un gros problème, mais c'est juste la façon dont Windows fait les choses. L'idée est que vous avez besoin d'avoir un ensemble de "ininterrompu" de votre tas. Malheureusement, Windows alloue de la mémoire quelque part au milieu. En fait cela vous laisse avec environ la moitié de la gauche ou de la moitié de la droite, à environ 1,5-2 go de morceaux, de répartir votre tas.
Découvrez cette question pour plus de détails sur 32 vs 64 bits.
Edit: Merci mrjoltcola pour l'exa préfixe!
Contiguë signifie tout simplement "sans trous", un long segment. Le montant est limité par la taille du segment de l'OS peut carte pour votre processus. Si Java nécessite une ligne de tas ou pas est une question de mise en œuvre spécifiques à la JVM et peut ne pas exister pour les autres machines virtuelles.
Mémoire contiguë n'est pas le problème de la limitation de windows à utiliser seulement 1,2 GO de mémoire. Même si min/max segment défini, JVM occuperait max segment de mémoire de la mémoire système lors du démarrage. Il sera alors de référence seulement min tas dans les territoires occupés de la mémoire système jusqu'à ce qu'il avait à se développer. La mémoire contiguë de max segment de mémoire est nécessaire pour démarrer la JVM en plus de l'implémentation d'améliorer les performances.
Que Marcus a expliqué au-dessus de la limite de 32 bits matériel est de 4 go pour un seul processus(thread). Chaque système d'exploitation de l'adresse de cette 4GO diffrenetly. 4 GO est majorly split comme l'espace noyau et l'espace utilisateur. En 32 bits de windows le max de l'espace utilisateur est proche de 1,5 GO. Il y a une option de démarrage de windows avec le commutateur /3GB pour avoir plus d'espace utilisateur.