java – 一个简单的“Hello World”在64位机器上需要10G虚拟内存,而在32位机器上需要10G虚拟内存?

在我们的生产机器上运行一个简单的Java程序,我注意到这个程序吃了更多的10G版本。我知道虚拟内存是不相关的,但至少我想知道为什么这是需要的。

public class Main {
  public static void main(String[] args) {
        System.out.println("Hello World!");
        try {
                Thread.sleep(10000);
        } catch(InterruptedException e) {
                /* ignored */
        }
  }
}

当我运行那个小程序时,顶部是什么意思:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
18764 myuser    20   0 10.2g  20m 8128 S  1.7  0.1   0:00.05 java

有人知道为什么这种情况发生吗?

uname -a说:

Linux m4fxhpsrm1dg 2.6.32-358.18.1.el6.x86_64 #1 SMP Fri Aug 2 17:04:38 EDT 2013 x86_64 x86_64 x86_64 GNU/Linux

在旧的32位linux机器上,同一个程序只消耗大约1G的virt。旧机器有4GB RAM,新的32GB。

最佳答案
default sizes for initial heap and maximum heap被定义为机器物理内存的百分比,现在的生产服务器往往有很多。

你可以通过-Xms and -Xmx command line options选择。

转载注明原文:java – 一个简单的“Hello World”在64位机器上需要10G虚拟内存,而在32位机器上需要10G虚拟内存? - 代码日志