首页 文章

Java特别大的虚拟内存,用于某些环境中的实际内存使用

提问于
浏览
2

我正在尝试了解我的java应用程序的虚拟内存使用情况,这似乎取决于我正在运行我的jar的环境 .

我有两个环境:

env 1

cat /proc/version
Linux version 3.5.0-48-generic (buildd@roseapple) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #72~precise1-Ubuntu SMP Tue Mar 11 20:08:23 UTC 2014

java -version
java version "1.7.0_51"
OpenJDK Runtime Environment (IcedTea 2.4.4) (7u51-2.4.4-0ubuntu0.12.04.2)
OpenJDK Server VM (build 24.45-b08, mixed mode)

env 2

cat /proc/version
Linux version 3.2.0-49-generic (buildd@komainu) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #75-Ubuntu SMP Tue Jun 18 17:39:32 UTC 2013

java -version
java version "1.7.0_25"
OpenJDK Runtime Environment (IcedTea 2.3.10) (7u25-2.3.10-1ubuntu0.12.04.2)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)

命令:

java -Xms128m -Xmx256m -cp myjar.jar com.test.Main

我在两个环境中运行完全相同的jar,相同的命令,虚拟内存使用量差别很大 .

env 1 这一切都按照我的想法运行,在虚拟内存中保留高达600Mb(Heap xmx256m permGen其他小东西) . 但是 env 2 虚拟内存最高可达2600Mb .

两个环境中的物理内存使用情况似乎都很好,等于配置的大小 .

我认为虚拟内存应该像_1797610中那样,但我找不到 env 2 使用那么多的解释 .

有谁经历过这个?我应该在环境或java配置中寻找什么?

1 回答

  • 0

    看起来env2运行64位Java( OpenJDK 64-Bit Server VM )而env1 Java是32位 .

    检查 /proc/PID/smaps - 它提供了进程虚拟地址空间的完整映射 .

相关问题