Java中是不是有可移植的共享内存机制?

Posted

技术标签:

【中文标题】Java中是不是有可移植的共享内存机制?【英文标题】:Is there a portable shared memory mechanism in Java?Java中是否有可移植的共享内存机制? 【发布时间】:2014-05-06 18:14:52 【问题描述】:

我们正在寻找一种共享内存机制,在 Java 中无需复制即可在进程之间传输大量数据。它必须是可移植的(包括 Windows)。有这样的事吗?我们正在考虑使用 mmap-ed 文件,因为它们是可移植的,但是它们的内容被写入磁盘,这是不可取的。有替代品吗? 否则,Windows 有页面文件支持的部分;有没有一种简单的方法可以在 Java 中使用这些?如果我们可以在 *nix 和 Windows 上使用其他一些共享内存机制,我们可能没问题。

【问题讨论】:

对我来说这对于普通的 Java 来说听起来太低级了......但我可能不知道 Java 的全部功能 【参考方案1】:

OpenHFT 中有几个解决方案。这些支持可以同时读取和写入的滚动队列,以及完全在堆外的 SharedHashMap。在 Linux 中,您可以“写入”到 tmpfs 文件系统,而在 Windows 中,您可以使用 Ramdrive。

这些库支持通过 TCP 在机器之间进行复制。 (Chronicle 的复制已经使用了一段时间,但 SharedHashMap 的复制仍处于测试阶段)

虽然它可以跨操作系统移植,但它使用 OpenJDK/HotSpot JVM 内部的一些功能,因此它不适用于 IBM JVM AFAIK。

注意:这些库支持使用一种不会产生垃圾的序列化形式读取和写入数据,或者就地使用堆外数据结构。也就是说,您无需反序列化整个对象即可访问其中的一部分。

【讨论】:

以上是关于Java中是不是有可移植的共享内存机制?的主要内容,如果未能解决你的问题,请参考以下文章

锁机制概述

Java内存模型分析

Java内存模型

Java内存模型

Java内存模型

Java锁机制