33 votes

Comprendre la taille maximale du tas JVM - 32 bits contre 64 bits

J'ai lu que la taille maximale du tas sur Windows 32 bits est de ~ 1,5 Go, ce qui est dû au fait que la JVM nécessite une mémoire contiguë. Quelqu'un peut-il expliquer le concept de «mémoire contiguë» et pourquoi vous ne disposez que de 1,5 Go maximum sous Windows?

Deuxièmement, quelle est alors la taille maximale du tas sur Windows 64 bits et pourquoi est-ce différent de ce qui est disponible sur 32 bits?

37voto

Pace Points 10393

Le 32-bit/64-bit 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!

6voto

codenheim Points 6836

Contigu signifie simplement «sans lacunes», un long segment unique. Le montant est limité par la taille d'un segment que le système d'exploitation peut mapper pour votre processus. Que Java nécessite ou non un segment contigu est un problème d'implémentation spécifique à JVM et peut ne pas exister pour d'autres machines virtuelles.

4voto

De 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.

Comme 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X