2

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

  PID PSID 用户名 THR PRI NICE SIZE RES 状态 时间 CPU 命令
  3505 31483 xxxxxxx 23 16 0    16G 215M睡眠   0:02    0.00% java    

我知道我的堆没问题,但是 JNI 内存可以增加进程大小,但我很困惑为什么它以 16G - SIZE 开头,我认为这是虚拟内存大小?真的会占用这么多内存吗?我应该关心它吗?

4

2 回答 2

0

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

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

于 2012-11-02T04:49:01.720 回答
0

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

于 2012-04-30T03:12:25.780 回答