我们正在寻找一种共享内存机制,以便在Java之间无需复制即可在进程之间传输大量数据。它必须是便携式的(包括Windows)。有这样的事吗?我们考虑使用mmap-ed文件,因为它们是可移植的,但是它们的内容被写入磁盘,这是不可取的。还有替代品吗? 否则,Windows具有页面文件支持的部分;有一种简单的方法在Java中使用它们吗?如果我们可以在* nix和Windows上使用其他共享内存机制,我们可能没问题。
答案 0 :(得分:1)
OpenHFT中有几个解决方案。它们支持可以同时读写的滚动队列,以及完全脱离堆的SharedHashMap。在Linux中你可以"写"到tmpfs文件系统,在Windows上你可以使用Ramdrive。
这些库支持TCP上的计算机之间的复制。 (Chronicle的复制已经使用了一段时间,但对于SharedHashMap,复制仍处于测试阶段)
虽然这可以跨操作系统移植,但它使用OpenJDK / HotSpot JVM内部的一些功能,因此它不适用于IBM JVM AFAIK。
注意:这些库支持使用序列化形式读取和写入数据,该序列化不会在堆数据结构之外创建垃圾或使用。即,您不需要反序列化整个对象以访问其中的一部分。