根据 pmap,JVM 总是在我的 linux 服务器中保留近 1G 内存

JVM always reserved nearly 1G memory in my linux server according to pmap

我在linux中写了一个javaclass和运行。 JVM 总是预留近 1G 的内存,不管堆大小有多大。我试过了

java -Xms512m -Xmx512m  MemTe
java -Xms100m -Xmx100m  MemTe
java -Xms2048m -Xmx2048m  MemTe

pmap中总有一行,值为1048064 104768.....

000000000204c000     132      12      12 rw---   [ anon ]
00000000e0000000  524800    4368    4368 rw---   [ anon ](It's heap size)
0000000100080000 1048064       0       0 -----   [ anon ]

00000000018f9000     132      12      12 rw---   [ anon ]
00000000f9c00000  102912    2320    2320 rw---   [ anon ](It's heap size)
0000000100080000 1048064       0       0 -----   [ anon ]


000000000176d000     132      12      12 rw---   [ anon ]
0000000080000000 2098048   13104   13104 rw---   [ anon ](It's heap size)
00000001000e0000 1047680       0       0 -----   [ anon ]

Linux 服务器有 6VCPU 16GB 内存

谁能解释一下为什么? 谢谢

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class MemTe {
  static volatile boolean RUN = false;
  static String s = null;
  static int tcnt;

  public static void main(String args[]) throws {
    List<String> st = new ArrayList<>();
    while (System.in.read() > 0) {
      RUN = false;
      Thread t = new Thread(MemTe::go);
      t.start();
      tcnt++;
      System.out.println("Threads: " + tcnt);
      System.out.println(System.in.read());
      RUN = true;

      st.add(s);
    }

  }

  private static void go() {
    while (true) {
      while (RUN) {           
      System.out.println(Thread.currentThread().getId());
        s = new String("s");

        try {
          Thread.sleep(100000);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    }

  }
}

这是
它的默认大小恰好是 1G;可以修改为 -XX:CompressedClassSpaceSize.

整个 Compressed Class Space 的虚拟内存最初是 reserved,但不是 committed,即它不占用物理内存。随着 Compress Class Space 的使用增长,这些页面将按需提交。这就是为什么在 pmap 输出中你会看到两个相邻区域:第一个(具有 rw 保护属性)被提交,其余被保留(RSS=0)。

0000000100000000     512     260     260 rw---   [ anon ]
0000000100080000 1048064       0       0 -----   [ anon ]