天天看点

JVM 堆内存查看JVM 堆内存查看

JVM 堆内存查看

JVM 堆内存查看的方式有多中,可以用命令也可以用工具(jconsole等),这里我来说下如何使用命令查看。

PrintFlagsFinal

$ java -XX:+PrintFlagsFinal -version |grep -E 'HeapSize|PerSize|ThreadStackSize'
     intx CompilerThreadStackSize                   = 0                                   {pd product}
    uintx ErgoHeapSizeLimit                         = 0                                   {product}
    uintx HeapSizePerGCThread                       = 87241520                            {product}
    uintx InitialHeapSize                          := 268435456                           {product}
    uintx LargePageHeapSizeThreshold                = 134217728                           {product}
    uintx MaxHeapSize                              := 4294967296                          {product}
     intx ThreadStackSize                           = 1024                                {pd product}
     intx VMThreadStackSize                         = 1024                                {pd product}
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
           

我们可用看到最大堆内存为4294967296字节,转换为4Gb,我们的电脑初始化堆内存为268435456字节,转换为250Mb

PrintCommandLineFlags

$ java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=268435456 -XX:MaxHeapSize=4294967296 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
           

查询出来的结果和上面我们看到的是一样的

JVM默认堆内存大小

如果不进行设置,Jvm会给我们设置一个默认的堆内存大小,我们先来看下oracle官方给出的文档

Initial Heap Size and Maximum Heap Size Changed for Parallel Garbage Collector
On server-class machines running either VM (client or server) with the parallel garbage collector (-XX:+UseParallelGC) the initial heap size and maximum heap size have changed as follows.

initial heap size
Larger of 1/64th of the machine's physical memory on the machine or some reasonable minimum. Before Java SE 5.0, the default initial heap size was a reasonable minimum, which varies by platform. You can override this default using the -Xms command-line option.

maximum heap size
Smaller of 1/4th of the physical memory or 1GB. Before Java SE 5.0, the default maximum heap size was 64MB. You can override this default using the -Xmx command-line option.

Note: The boundaries and fractions given for the heap size are correct for Java SE 5.0. They are likely to be different in subsequent releases as computers get more powerful.
           

翻译过来大概就是,初始的堆内存大小为物理内存的1/64的较大值或者某个合理的最小值;最大堆内存小于物理内存的1/4或者1GB。需要注意的是,这些这是jdk 1.5之后的默认值。