如何在两个 JVM 实例之间共享内存?

2022-09-02 21:54:58

我在JVM(Scala)中构建了一个巨大的图,我想反复使用它,调整算法。我宁愿不要每次都从磁盘重新加载它。有没有办法让它坐在一个JVM中,同时从另一个正在开发算法的JVM连接?


答案 1

将图形保存到磁盘,然后使用MappedByteBuffer将其映射到内存中。两个进程应使用相同的内存,该内存将与页面缓存共享。


答案 2

两个JVM听起来比它需要的要复杂得多。你有没有考虑过做一种“热部署”设置,你的主程序加载图形,显示UI,然后要求(或自动查找)一个包含实际算法代码的jar/类文件来加载?这样,您的算法代码将在与图形相同的 jvm 中运行,但您不必仅仅为了重新加载新的算法实现而重新加载图形。

更新以解决OP在评论中提出的问题:

下面介绍了如何构建代码,以便您的算法可以交换。各种算法的作用并不重要,只要它们对相同的输入数据进行操作即可。只需定义一个如下所示的接口,并让您的图形算法实现它。

public interface GraphAlgorithm {
  public void doStuff(Map<whatever> myBigGraph)
}

如果你的算法将结果显示给某种小部件,你也可以将其传递进来,或者让doStuff()返回某种结果对象。


推荐