【问题标题】:Share classes between JVMs在 JVM 之间共享类
【发布时间】:2012-12-06 01:05:39
【问题描述】:

我正在开发一个可以在同一台计算机上同时实例化多次的应用程序。每个 JVM 都不必要地将应用程序类加载到自己的内存中,因为所有应用程序的类都是相同的。

我读到了 CDS herehere,但它似乎只对 JDK 类有效。

如何在 JVM 之间共享我的应用程序类的数据?

【问题讨论】:

  • 在我看来就像编写一个新的类加载器并在进程之间使用共享内存。但这比购买更多的 ram 更痛苦。
  • “但它似乎只对 Java 类有效”,还有什么需要跨 JVM 共享?
  • @SwapnilS 这不是我的意思,抱歉解释不好。我想说的是它只共享 JDK 类。我将编辑问题。
  • 你的目标是什么?减少内存占用?
  • 这可以通过将代码导出到系统共享库(dll,so)来实现,这在大多数情况下可能不适用。

标签: java jvm shared-memory


【解决方案1】:

我不是特别了解这个主题,但我做了一些研究。我认为我们可以相当肯定地说,在大多数 JVM 中这实际上是不可能的。下面的问题与您的问题相似,它的答案和 cmets 可能会有所帮助。

Can multiple JVM processes share memory for common classes?

一种可能的选择是,您可以将想要共享的类放在一个进程中,并使用 JMX(Java 管理扩展)之类的东西公开它们的功能。这样,多次加载的其他进程就不必加载所有类。但是,这能在多大程度上减少总资源占用当然是有问题的,并且取决于具体情况。

【讨论】:

    【解决方案2】:

    虽然理论上听起来不错,但这并不实际。 Java 类的存储映像由一定数量的常量数据组成,但也可能包含同样多的“可变”数据——指向其他类的链接指针、各种运行时表、JITC 代码等。弄清楚什么是可共享的,什么是不可共享的t 充其量是困难的,并导致设计不能产生最佳性能。

    【讨论】:

      猜你喜欢
      • 2014-10-13
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多