4

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

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

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

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

所以问题是,我如何确定通过 Copy-On-Write 在进程之间共享多少数据?

4

1 回答 1

-3

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

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

只有当一个进程是另一个进程的正确祖先时,数据才会在进程之间共享。
这将进一步由Java程序的内存布局和页面内的数据决定。所有这些都可能因版本而异。

于 2009-08-26T21:46:12.183 回答