Maximum Java heap size of a 32-bit JVM on a 64-bit OS

前端 未结 17 2393

The question is not about the maximum heap size on a 32-bit OS, given that 32-bit OSes have a maximum addressable memory size of 4GB, and that the JVM\'s max heap size depen

17条回答
  •  萌比男神i
    2020-11-22 07:07

    Here is some testing under Solaris and Linux 64-bit

    Solaris 10 - SPARC - T5220 machine with 32 GB RAM (and about 9 GB free)

    $ java -XX:PermSize=128M -XX:MaxPermSize=256M -Xms512m -Xmx3750m MaxMemory
    Error occurred during initialization of VM
    Could not reserve space for ObjectStartArray
    $ java -XX:PermSize=128M -XX:MaxPermSize=256M -Xms512m -Xmx3700m MaxMemory
    Total Memory: 518520832 (494.5 MiB)
    Max Memory:   3451912192 (3292.0 MiB)
    Free Memory:  515815488 (491.91998291015625 MiB)
    Current PID is: 28274
    Waiting for user to press Enter to finish ...
    
    $ java -version
    java version "1.6.0_30"
    Java(TM) SE Runtime Environment (build 1.6.0_30-b12)
    Java HotSpot(TM) Server VM (build 20.5-b03, mixed mode)
    
    $ which java
    /usr/bin/java
    $ file /usr/bin/java
    /usr/bin/java: ELF 32-bit MSB executable SPARC Version 1, dynamically linked, not stripped, no debugging information available
    
    $ prstat -p 28274
       PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP
    28274 user1     670M   32M sleep   59    0   0:00:00 0.0% java/35
    

    BTW: Apparently Java does not allocate much actual memory with the startup. It seemed to take only about 100 MB per instance started (I started 10)

    Solaris 10 - x86 - VMWare VM with 8 GB RAM (about 3 GB free*)

    The 3 GB free RAM is not really true. There is a large chunk of RAM that ZFS caches use, but I don't have root access to check how much exactly

    $ java -XX:PermSize=128M -XX:MaxPermSize=256M -Xms512m -Xmx3650m MaxMemory
    Error occurred during initialization of VM
    Could not reserve enough space for object heap
    Could not create the Java virtual machine.
    
    $ java -XX:PermSize=128M -XX:MaxPermSize=256M -Xms512m -Xmx3600m MaxMemory
    Total Memory: 516423680 (492.5 MiB)
    Max Memory:   3355443200 (3200.0 MiB)
    Free Memory:  513718336 (489.91998291015625 MiB)
    Current PID is: 26841
    Waiting for user to press Enter to finish ...
    
    $ java -version
    java version "1.6.0_41"
    Java(TM) SE Runtime Environment (build 1.6.0_41-b02)
    Java HotSpot(TM) Server VM (build 20.14-b01, mixed mode)
    
    $ which java
    /usr/bin/java
    
    $ file /usr/bin/java
    /usr/bin/java:  ELF 32-bit LSB executable 80386 Version 1 [FPU], dynamically linked, not stripped, no debugging information available
    
    $ prstat -p 26841
       PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP
    26841 user1     665M   22M sleep   59    0   0:00:00 0.0% java/12
    

    RedHat 5.5 - x86 - VMWare VM with 4 GB RAM (about 3.8 GB used - 200 MB in buffers and 3.1 GB in caches, so about 3 GB free)

    $ alias java='$HOME/jre/jre1.6.0_34/bin/java'
    
    $ java -XX:PermSize=128M -XX:MaxPermSize=256M -Xms512m -Xmx3500m MaxMemory
    Error occurred during initialization of VM
    Could not reserve enough space for object heap
    Could not create the Java virtual machine.
    
    $ java -XX:PermSize=128M -XX:MaxPermSize=256M -Xms512m -Xmx3450m MaxMemory
    Total Memory: 514523136 (490.6875 MiB)
    Max Memory:   3215654912 (3066.6875 MiB)
    Free Memory:  511838768 (488.1274871826172 MiB)
    Current PID is: 21879
    Waiting for user to press Enter to finish ...
    
    $ java -version
    java version "1.6.0_34"
    Java(TM) SE Runtime Environment (build 1.6.0_34-b04)
    Java HotSpot(TM) Server VM (build 20.9-b04, mixed mode)
    
    $ file $HOME/jre/jre1.6.0_34/bin/java
    /home/user1/jre/jre1.6.0_34/bin/java: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), for GNU/Linux 2.2.5, not stripped
    
    $ cat /proc/21879/status | grep ^Vm
    VmPeak:  3882796 kB
    VmSize:  3882796 kB
    VmLck:         0 kB
    VmHWM:     12520 kB
    VmRSS:     12520 kB
    VmData:  3867424 kB
    VmStk:        88 kB
    VmExe:        40 kB
    VmLib:     14804 kB
    VmPTE:        96 kB
    

    Same machine using JRE 7

    $ alias java='$HOME/jre/jre1.7.0_21/bin/java'
    
    $ java -XX:PermSize=128M -XX:MaxPermSize=256M -Xms512m -Xmx3500m MaxMemory
    Error occurred during initialization of VM
    Could not reserve enough space for object heap
    Error: Could not create the Java Virtual Machine.
    Error: A fatal exception has occurred. Program will exit.
    
    $ java -XX:PermSize=128M -XX:MaxPermSize=256M -Xms512m -Xmx3450m MaxMemory
    Total Memory: 514523136 (490.6875 MiB)
    Max Memory:   3215654912 (3066.6875 MiB)
    Free Memory:  511838672 (488.1273956298828 MiB)
    Current PID is: 23026
    Waiting for user to press Enter to finish ...
    
    $ java -version
    java version "1.7.0_21"
    Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
    Java HotSpot(TM) Server VM (build 23.21-b01, mixed mode)
    
    $ file $HOME/jre/jre1.7.0_21/bin/java
    /home/user1/jre/jre1.7.0_21/bin/java: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
    
    $ cat /proc/23026/status | grep ^Vm
    VmPeak:  4040288 kB
    VmSize:  4040288 kB
    VmLck:         0 kB
    VmHWM:     13468 kB
    VmRSS:     13468 kB
    VmData:  4024800 kB
    VmStk:        88 kB
    VmExe:         4 kB
    VmLib:     10044 kB
    VmPTE:       112 kB
    

提交回复
热议问题