linux - 如何确定 Linux 上多进程的 JVM 内存占用

标签 linux memory jvm shared footprint

我正在尝试量化执行相同进程的多线程与多进程的小型 Java 应用程序的内存占用差异。

我所有的测试都是在 Linux 下进行的。

运行多线程时,确定每个线程的总体占用空间和额外开销相对容易。根据 pmap,运行单线程进程时,JVM 占用空间大(200-300M 虚拟空间)。如果我运行同一个应用程序的多个副本,我会看到内存占用 x N,并且没有任何 Java 代码在进程之间共享。

我被告知,由于 Java 代码是字节码,不可执行,因此它不会像 C 二进制文件那样在进程之间共享代码。然而,后来我得知它可能会使用 Copy-On-Write 技术来实现同样的事情。如果我使用 pmap,它只会告诉我该进程的足迹,而不会指示可以与另一个进程共享多少。

所以问题是,我如何确定进程之间通过写时复制共享了多少数据?

最佳答案

在正确配置的非嵌入式 Linux 系统上,您为什么要关心内存占用?

如果您有答案,会有什么不同?

只有当一个进程是另一个进程的真正祖先时,数据才会在进程之间共享。
还要看java程序的内存布局和页面内的数据。所有这些都可能因版本而异。

关于linux - 如何确定 Linux 上多进程的 JVM 内存占用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1328989/

相关文章:

java - 在 block 中连续使用相同的方法会重新计算该方法吗?

java - 暂停 Java 应用程序

linux - 如何从没有 $ 符号的代码片段中复制 bash 命令?

linux - 在 Ubuntu 14.04 上安装 Oculus DK2 - 找不到 ludev

linux - 使 menuconfig 从 ti-processor-sdk-linux-am335x-evm-01.00.00.03 执行错误

c - 使用 GOTO 时 StackFrames 会受到怎样的影响?

c++ - 在空闲存储上分配内存

c++ - vector c++ vector 的大小

java - 如何用 Java 编写正确的微基准测试?

linux - htaccess 专家 : Redirect all but root to one TLD, 将 root 重定向到另一个 TLD - WordPress