我在JVM (Scala)中构建了一个巨大的图,我想反复使用它来调整算法。我不想每次都从磁盘重新加载它。有没有办法让它驻留在一个JVM中,同时从另一个正在开发算法的JVM进行连接?
发布于 2009-07-28 17:52:50
将图表保存到磁盘,然后使用MappedByteBuffer将其映射到内存中。这两个进程应该使用相同的内存,该内存将与页面缓存共享。
发布于 2009-07-28 20:20:27
两个JVM听起来比实际情况更复杂。您是否考虑过进行一种“热部署”设置,即主程序加载图形,显示UI,然后请求(或自动查找)一个jar/类文件来加载包含实际算法代码的文件?这样,您的算法代码将在与图相同的jvm中运行,但您不必仅仅为了重新加载新的算法实现而重新加载图。
更新以在评论中解决OP的问题:
下面是你如何组织你的代码,使你的算法是可交换的。不同的算法做什么并不重要,只要它们对相同的输入数据进行操作即可。只需定义一个如下所示的接口,并让您的图形算法实现它。
public interface GraphAlgorithm {
public void doStuff(Map<whatever> myBigGraph)
}
如果您的算法要将结果显示到某种小部件上,您也可以将其传入,或者让doStuff()返回某种results对象。
发布于 2009-07-29 15:47:47
你有没有考虑过OSGi平台?它驻留在单个JVM中,但将允许您使用算法升级捆绑包,而无需重启平台。因此,您可能会有一个长期运行的捆绑包,其中包含巨大的数据结构和访问数据的短期算法捆绑包。
https://stackoverflow.com/questions/1195633
复制相似问题