我正在尝试量化执行相同进程多线程与多进程的小型Java应用程序的内存占用差异。
我所有的测试都在Linux下进行。
运行多线程时,确定每个线程的总体占用空间和额外开销相对容易。在运行单线程进程时,根据pmap,JVM具有较大的占用空间(200-300M虚拟空间)。如果我运行同一个应用程序的多个副本,我会看到内存占用量为x N,并且进程之间不会共享任何java代码。
我被告知,由于Java代码是字节码,而不是可执行代码,因此它不会像处理C二进制文件那样在进程之间共享代码。但是,后来我被告知可能会使用Copy-On-Write技术来实现同样的目的。如果我使用pmap,它只是告诉我该过程的足迹,并不表示可以与另一个过程共享多少。
所以问题是,我如何确定进程之间通过写时复制共享多少数据?
答案 0 :(得分:-3)
在正确配置的非嵌入式Linux系统上,您为什么要关心内存占用?
如果你有答案会有什么不同?
如果一方是另一方的适当祖先,数据只会在进程之间共享 并且它将由java程序的内存布局和页面内的数据进一步确定。所有这些都可能在发布之间发生变化。