jvm同时启动两个进程会有两个堆嘛?
是的,一般来说,每个进程是拥有自己独立的存储空间,那怕它们是同一个程序的多次执行。 但其实每个进程所占用的空间其实包含了代码段,数据段,堆栈段等。这些用途不同的存储空间是可以分别进行管理的,这也是段式内存管理的一个重要目标。
这直接导致了不同的进程间可以拥有不同的数据内容(比如写字板里不同的文本),但它们可以共用一个代码段,因为这一部分不会因为运算的数据不同而有任何变化。 其实在Windows里,dll动态链接库也是这个思想,一些函数功能和它的代码部分,甚至在程序执行时并不装入内存,只有当程序运行到需要调用他们时才会被动态的真正装入内存,同时只装入内存一次,如果再有其它程序也需要调用这个dll,那么它们会共享这部分代码段,从而能有效的提高内存的使用,减少浪费。
尤其是很多操作系统的底层调用,比如用于处理图形界面的显示等功能就可能被所有的图形界面程序用到,这时就可以大大提高内存的利用率。