Quelle est la quantité maximale d'espace mémoire que l'on peut allouer à Java sur une plate-forme 64 bits? Est-ce illimité?
Théoriquement 264, mais il pourrait y avoir des limitations (évidemment)
Selon this FAQ il n’est limité que par la mémoire et l’espace de permutation sur le système local:
Sur les ordinateurs virtuels 64 bits, vous avez une adressabilité de 64 bits, ce qui limite la taille maximale du segment de mémoire Java uniquement à la quantité de mémoire physique et à l’espace de permutation fournis par votre système.</ p>Voir aussi Pourquoi ne puis-je pas obtenir un segment de mémoire plus important avec la JVM 32 bits?
N'oubliez pas non plus que vous devez définir le segment de mémoire maximal via la ligne de commande. Sans une commande -Xmx. sans cela, Java utilise 64 Mo + 30% = 83,2 Mo en tant que segment de mémoire maximal par défaut sur les machines 64 bits, conformément à la même FAQ.
Java -Xmx1000g myClass
fonctionne bien sur ma machine. Mais il ne semble pas encore supporter le modificateur 't', vous ne pouvez donc pas spécifier la mémoire maximale en téraoctets :)
Si vous pouviez transformer chaque atome de l'univers en un octet de RAM, vous pourriez l'allouer dans un espace d'adressage de 64 bits.
En fait, c'est une légère exagération.
Il y a 10 ^ 80 atomes dans l'univers (selon WolframAlpha) et 2 ^ 64 octets d'espace d'adressage dans un système 64 bits, de sorte que vous ne pourrez adresser qu'un sur 5 x 10 ^ 60 atomes. Mais si vous avez 18 milliards d'octets de RAM, vous aurez probablement besoin de deux trous noirs quantiques pour l'alimenter.
Cela dépend probablement du système sur lequel votre VM s'exécute. Si vous utilisez une architecture AMD x64, l'espace d'adressage des processeurs actuellement livrés utilise 48 bits, et non 64. Cela donne un maximum théorique d'environ 256 To. (Voir http://en.wikipedia.org/wiki/X86-64 )
Je ne suis pas un spécialiste des machines virtuelles, mais tout système d’exploitation moderne donnera généralement autant de mémoire qu’il existe RAM physique plus la mémoire virtuelle disponible. Probablement ce que la VM transmettra à votre application en fonction de sa configuration.
Avec les machines virtuelles récentes de Sun, la taille pratique de la limite de tas est généralement de 512 fois la mémoire physique et/ou virtuelle disponible. Même si la limite théorique est beaucoup plus élevée, la VM allouera un octet à des fins de modification pour chaque tranche de 512 octets de mémoire vive au démarrage, de sorte que 1 To nécessitera immédiatement 2 Go pour la gestion de la mémoire.
En théorie, il se situe entre 2^63
et 2^64
octets.
En pratique, il est limité par la quantité de mémoire physique et d'espace d'échange disponibles sur votre ordinateur. Et la mémoire physique est à son tour limitée par votre jeu de puces (c'est-à-dire le nombre de broches d'adresse sur le bus d'adresses de mémoire physique) et la carte mère (c'est-à-dire le nombre et la taille des supports DIMM).