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

问题描述 投票:2回答:1

我写了一个java类并在linux中运行它。无论堆大小多大,JVM总是保留近1G的内存。我试过了

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

pmap中总有一行,Value是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();
        }
      }
    }

  }
}
memory jvm pmap
1个回答
2
投票

这是Compressed Class Space。 它的默认大小正好是1G;可以用-XX:CompressedClassSpaceSize修改。

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

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

More about JVM virtual memory

© www.soinside.com 2019 - 2024. All rights reserved.