Question

Je lance le même processus sur une machine 32 bits comme sur une machine 64 bits avec la même mémoire les paramètres VM (-Xms1024m -Xmx1024m) et similaire VM version (1.6.0_05 vs 1.6.0_16). Cependant, l'espace virtuel utilisé par la machine 64 bits (comme indiqué en haut sous « VIRT ») est presque trois fois plus grand que celui 32bit!

Je sais que les machines virtuelles 64 bits utilisera une mémoire peu plus pour les références plus grandes, mais comment peut-il être trois fois plus grand? Suis-je lire VIRT en haut de manière incorrecte?

Les données complètes présentées ci-dessous, montrant haut, puis le résultat de jmap -heap, d'abord pour 64bit, puis pour 32bit. Notez le VIRT pour 64bit est 3319m pour 32bit est 1220m.

* * 64bit

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
22534 agent     20   0 3319m 163m  14m S  4.7  2.0   0:04.28 java               

$ jmap -heap 22534
Attaching to process ID 22534, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 10.0-b19

using thread-local object allocation.
Parallel GC with 4 thread(s)

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 1073741824 (1024.0MB)
   NewSize          = 2686976 (2.5625MB)
   MaxNewSize       = -65536 (-0.0625MB)
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 21757952 (20.75MB)
   MaxPermSize      = 88080384 (84.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 268500992 (256.0625MB)
   used     = 247066968 (235.62142181396484MB)
   free     = 21434024 (20.441078186035156MB)
   92.01715277089181% used
From Space:
   capacity = 44695552 (42.625MB)
   used     = 0 (0.0MB)
   free     = 44695552 (42.625MB)
   0.0% used
To Space:
   capacity = 44695552 (42.625MB)
   used     = 0 (0.0MB)
   free     = 44695552 (42.625MB)
   0.0% used
PS Old Generation
   capacity = 715849728 (682.6875MB)
   used     = 0 (0.0MB)
   free     = 715849728 (682.6875MB)
   0.0% used
PS Perm Generation
   capacity = 21757952 (20.75MB)
   used     = 16153928 (15.405586242675781MB)
   free     = 5604024 (5.344413757324219MB)
   74.24378912132907% used

* * 32bit

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
30168 agent     20   0 1220m 175m  12m S  0.0  2.2   0:13.43 java               

$ jmap -heap 30168
Attaching to process ID 30168, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 14.2-b01

using thread-local object allocation.
Parallel GC with 8 thread(s)

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 1073741824 (1024.0MB)
   NewSize          = 1048576 (1.0MB)
   MaxNewSize       = 4294901760 (4095.9375MB)
   OldSize          = 4194304 (4.0MB)
   NewRatio         = 8
   SurvivorRatio    = 8
   PermSize         = 16777216 (16.0MB)
   MaxPermSize      = 67108864 (64.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 89522176 (85.375MB)
   used     = 80626352 (76.89128112792969MB)
   free     = 8895824 (8.483718872070312MB)
   90.0629940005033% used
From Space:
   capacity = 14876672 (14.1875MB)
   used     = 14876216 (14.187065124511719MB)
   free     = 456 (4.3487548828125E-4MB)
   99.99693479832048% used
To Space:
   capacity = 14876672 (14.1875MB)
   used     = 0 (0.0MB)
   free     = 14876672 (14.1875MB)
   0.0% used
PS Old Generation
   capacity = 954466304 (910.25MB)
   used     = 10598496 (10.107513427734375MB)
   free     = 943867808 (900.1424865722656MB)
   1.1104107034039412% used
PS Perm Generation
   capacity = 16777216 (16.0MB)
   used     = 11366448 (10.839889526367188MB)
   free     = 5410768 (5.1601104736328125MB)
   67.74930953979492% used

Était-ce utile?

La solution

Pensez à l'espace virtuel en mémoire ce programme sera jamais en mesure d'utiliser. Il n'est pas la mémoire qu'il utilise en fait. 64 bits OS mémoire virtuelle est pratiquement sans fin, il n'y a pas de limitation 2Gb comme dans 32 bits, afin que les développeurs sont libres de choisir une taille virtuelle. Il n'y a pas de quoi s'inquiéter. Le RES est RAM physique utilisé.

Autres conseils

ne sont pas tous les paramètres de mémoire sont les mêmes - en particulier, regardez MaxNewSize, ce qui est négatif dans la version 64 bits. De plus, en 64 bits, la mémoire virtuelle est effectivement illimitée pour les programmes écrits pour les ordinateurs d'aujourd'hui, et ce n'est pas quelque chose à se préoccuper. L'utilisation de la mémoire réelle de la 64bit VM est inférieure à 32 bits.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top