Vous pouvez demander à la Java Runtime:
public class MaxMemory {
public static void main(String[] args) {
Runtime rt = Runtime.getRuntime();
long totalMem = rt.totalMemory();
long maxMem = rt.maxMemory();
long freeMem = rt.freeMemory();
double megs = 1048576.0;
System.out.println ("Total Memory: " + totalMem + " (" + (totalMem/megs) + " MiB)");
System.out.println ("Max Memory: " + maxMem + " (" + (maxMem/megs) + " MiB)");
System.out.println ("Free Memory: " + freeMem + " (" + (freeMem/megs) + " MiB)");
}
}
Cela permettra de signaler le "Max de la Mémoire", sur la base par défaut de l'allocation de tas. Si vous avez encore besoin de jouer avec -Xmx (HotSpot). J'ai trouvé ce qui marche sur Windows 7 Entreprise 64 bits, mon 32 bits de la JVM HotSpot peut allouer jusqu'à 1577MiB:
[C:scratch]> java -Xmx1600M MaxMemory
Erreur s'est produite lors de l'initialisation de la VM
Ne pouvait pas réserver suffisamment d'espace pour des tas d'objets
N'a pas pu créer la machine virtuelle Java.
[C:scratch]> java -Xmx1590M MaxMemory
Mémoire Totale: 2031616 (1.9375 MiB)
Mémoire Max: 1654456320 (1577.8125 MiB)
Libérer De La Mémoire: 1840872 (1.75559234619 MiB)
[C:scratch]>
Alors qu'avec une JVM 64 bits sur le même OS, bien sûr, c'est beaucoup plus élevée (environ 3TiB)
[C:scratch]> java -Xmx3560G MaxMemory
Erreur s'est produite lors de l'initialisation de la VM
Ne pouvait pas réserver suffisamment d'espace pour des tas d'objets
[C:scratch]> java -Xmx3550G MaxMemory
Mémoire Totale: 94240768 (89.875 MiB)
Mémoire Max: 3388252028928 (3184151.84297 MiB)
Libérer De La Mémoire: 93747752 (89.4048233032 MiB)
[C:scratch]>
Comme d'autres l'ont déjà mentionné, il dépend de l'OS.
- Pour la version 32 bits de Windows: <2 go de ram (Windows internals livre dit de 2 go pour les processus utilisateur)
- Pour 32-bit BSD / Linux: <3 GO (à partir du Diable Livre)
- Pour 32-bit mac os X: <4 GO (à partir de Mac OS X entrailles livre)
- Ce n'est pas sûr 32 bits Solaris, essayez le code ci-dessus et laissez-nous savoir.
Pour une version 64 bits de l'OS hôte, si la JVM est en 32 bits, ça va encore dépendre, le plus probable, comme ci-dessus comme l'a démontré.
-- Mise à JOUR 20110905: je voulais Juste pointer un certain nombre d'autres observations / détails:
- Le matériel que j'ai couru ce sur est de 64 bits avec 6 go de réels RAM installée. Le système d'exploitation Windows 7 Entreprise 64 bits
- Le montant réel de l'Exécution.MaxMemory qui peut être alloué dépend aussi du système d'exploitation de l'ensemble de travail. J'ai relancé ce alors que j'avais aussi VirtualBox en cours d'exécution et trouvé que je pouvais pas réussir le démarrage de la JVM HotSpot avec
-Xmx1590M
et a dû aller plus petites. Cela implique également que vous pouvez obtenir plus de 1590M en fonction de votre taille du jeu de travail à l'époque (bien que j'avais encore maintenir ce sera sous 2GiB pour 32 bits, car de Windows " design)