我正在尝试了解我的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 回答
看起来env2运行64位Java(
OpenJDK 64-Bit Server VM
)而env1 Java是32位 .检查
/proc/PID/smaps
- 它提供了进程虚拟地址空间的完整映射 .