【发布时间】:2016-07-24 12:52:58
【问题描述】:
我只是想知道当 JavaVM(Sun、Linux)开始产生多个 JVM 进程时实际占用的空间是多少。当我记得很清楚时,那些应该分享 rt.jar (也许更远?)。这些 JVM 是否共享 JIT 缓存(所有 JVM 具有相同的 Classpath)?
有什么办法可以减少多实例 JVM 的开销吗? (除了为堆设置更小的限制)?
在编写应用程序时我可以做些什么?
我可以共享内存区域吗?也许共享映射的内存块?
【问题讨论】:
-
为什么需要生成多个 JVM?有人愿意这样做是有原因的,但你的原因是什么?
-
如果您使用多个 JVM,这是有充分理由的,与您运行的机器相比,每个 JVM 的内存开销应该非常小。
-
简单地说,在开发过程中,我将在一个进程中拥有任何东西。在部署过程中,我想知道是否可以将许多不同的部分放在不同的过程中以帮助提高稳定性而不是简单性。给你举个例子。如果您在 Linux 上调出最近的 Chrome 版本 + Selenium,则进程卡住并锁定的几率约为 25:1。通过将它放在自己的进程中,如果需要太长时间,就杀死他的 chrome 进程,这就是答案。另一种情况是运行 C++ 代码,将其隔离在自己的进程中不会使您的 JVM 因故障而崩溃,如果发生故障,您可以重新启动它。
-
有许多不同的 JVM。有些比其他的占用空间更小,通常以牺牲性能为代价。
-
今天基本上我认识的每个人都在使用 Sun VM。据我所知,其他虚拟机几乎没有用于生产。一些在开发过程中使用增强虚拟机(动态替换类并使对象图适应变化)。
标签: java memory jvm memory-footprint