【问题标题】:Share memory between jars在 jar 之间共享内存
【发布时间】:2015-04-19 14:32:44
【问题描述】:

我的项目中有几个私有 jar,我需要它们从同一个 b 维数组中写入和读取值。

编辑:现在我得到了另一个要求 - 允许 C++\MFC 应用程序写入此共享内存。所以,总而言之,我有一个 C++ 应用程序写入共享内存和从中读取的 jars。实现它的最佳方法是什么?也许是网络服务?

如果是 - 如何实现?

【问题讨论】:

  • 取决于您如何使用罐子。您是否为每个虚拟机启动一个单独的虚拟机 - 例如java -jar myjar1.jar 和 java -jar myjar2.jar。如果你是,那么你不能。如果您将它们用作应用程序中的库,那么您需要解释或显示代码。
  • 我会将它们用作应用程序外部库。你会建议我什么丹?谢谢。

标签: java jar shared-memory


【解决方案1】:

你可以;

  • 在同一个 JVM 中运行所有 jar。这样,它们将在本地共享内存。
  • 使用内存映射文件,如果您不需要持久性,可能在内存驱动器上。

Chronicle 有许多库可以让使用内存映射文件变得更容易

  • 在本机内存中提供线程安全操作。
  • 构建一些有用的数据结构,例如key-value storepersisted queue
  • 支持更高效的序列化和对本机内存的零拷贝访问。

有关所有Apache 2.0 Open Source libraries的信息

BTW Chronicle 还支持其数据结构的分发,这意味着 jar 不必在同一台机器上运行。

【讨论】:

  • 谢谢彼得。 1. jar 将被导入到我的应用程序中。这意味着它们将在 dsaem jar 上运行,对吗?如果是这样,我仍然无法理解他们如何读写同一个数组? 2. 映射文件是关于地图的。那么我怎样才能使用一个数组呢? 3. 查了一下Chornicle主页,没找到b维数组的解法。你知道那里对我有什么帮助吗?谢谢
  • 1.您不会在 jar 中运行应用程序,而是运行程序并使用许多 jar 来提供代码和资源。你如何做到这一点取决于你。当您一次将一个文件内存映射到两个程序时,它们都可以看到彼此的数据副本,前提是您以线程安全的方式执行此操作。 2.内存映射与Map数据结构关系不大。它是关于我们如何将虚拟内存映射到实际内存,在这种情况下是一个文件。 3. 你可以使用直接内存映射文件来实现你自己的N维数组,就像在C中实现N维数组一样。
猜你喜欢
  • 1970-01-01
  • 2013-07-04
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
相关资源
最近更新 更多