为什么我的Java Process在启动时会占用16G虚拟内存

时间:2012-04-30 03:03:35

标签: java process java-native-interface

我只是在16核CPU上使用一个简单的独立java程序测试一些JNI调用。我正在使用64位JVM&操作系统是Linux AS5。但是,一旦我用64位c ++库启动我的测试程序,我就会看到'SIZE'列显示16G。 top命令输出如下:

  PID  PSID USERNAME   THR PRI NICE  SIZE   RES STATE   TIME     CPU COMMAND
  3505 31483 xxxxxxx    23  16    0   16G  215M sleep   0:02   0.00% java    

我知道我的堆是可以的,但JNI内存可以增加进程大小,但我很困惑为什么它从16G-SIZE开始,我认为是虚拟内存大小?它真的占用了那么多记忆吗?我应该关注它吗?

2 个答案:

答案 0 :(得分:0)

奇怪,但可能是你的JNI调用要么以某种方式迅速泄漏内存或分配大量内存。您使用什么命令行来启动JVM,以及您的JNI代码在做什么?

答案 1 :(得分:0)

Greg Hewgill的评论基本上说明了一切:你只使用了215 MB的实内存。在我的机器上,没有任何VM参数的无任何Java进程获得8 GB。你有四倍的内核,所以从内存的两倍开始对我来说是有意义的。

由于此数字只使用虚拟地址空间,例如2 * 48 B或2 * 64 B,它实际上是免费的。您可以使用-mx1G将内存限制为1 GB,但请注意,这是一个硬限制,当进程需要更多时,您将获得OOME。