在 Java 服务和本机应用程序之间共享缓冲区,访问开销最小

Posted

技术标签:

【中文标题】在 Java 服务和本机应用程序之间共享缓冲区,访问开销最小【英文标题】:sharing a buffer between a Java service and a native app with minimal access overhead 【发布时间】:2013-07-31 21:03:06 【问题描述】:

我正在尝试在 android Java 服务和本机进程之间设置共享内存区域。本机进程没有 Java 组件,纯粹是 C++,并通过命令行直接从 shell 调用。

我相信我可以使用 ashmem 和 binder 来实现这一点。首先调用 ashmem_create_region,对结果调用 mmap,然后使用 binder 将结果 fd 传递给另一个进程。另一个进程在 fd 上执行 mmap,从而获得对共享区域的访问权限。

我了解这适用于两个 Java 应用程序,也适用于一个 Java 应用程序或服务与一个本机模式进程。

我现在想知道 Java 服务如何有效地访问数据。我想使用这种机制将大约 300MB 大小的浮点缓冲区从本机应用程序复制到 Java 服务。现在,Java 服务需要访问这些数据,而无需像 JNI 那样产生开销。分配共享区域的最佳策略是什么,以便本机程序可以将浮点数快速复制到缓冲区中,并且 Java 服务可以以最小的开销访问这些值?

谢谢

【问题讨论】:

【参考方案1】:

看看这个例子。 它在 Java 和本机应用程序之间创建共享内存。 https://github.com/vecio/AndroidIPC

【讨论】:

以上是关于在 Java 服务和本机应用程序之间共享缓冲区,访问开销最小的主要内容,如果未能解决你的问题,请参考以下文章

反应本机和java之间的WebSocket

在 Java 中为 JOGL 释放直接缓冲区本机内存

在Linux上搭建Samba服务器,用于与Windows之间的跨平台文件共享

在 Dalvik 中的两个进程之间共享内存

分配本机缓冲区并在 JAVA 中使用?

微服务架构中如何在微服务之间共享java模型