在本机进程和java服务之间使用ashmem而没有高额开销

时间:2013-08-02 17:31:55

标签: java android java-native-interface ashmem

我正在尝试在Android Java服务和本机进程之间设置共享内存区域。本机进程没有Java组件,纯粹是C ++,可以通过命令行直接从shell调用。应用程序需要向服务发送完整图像(当前大约300 MB)。图像是浮点数据。

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

我知道这可以在两个Java应用程序之间工作,也可以在Java应用程序或服务与本机模式进程之间工作。

我现在想知道Java服务如何有效地访问数据。我想使用这种机制将一个大小约为300MB的浮动缓冲区从本机应用程序复制到Java服务。现在,Java服务需要访问此数据而不会产生高额开销。有人告诉我,由于从Java服务访问数据的成本,JNI开销阻止使用这种技术。它是否正确?有没有其他方法可以做到这一点,而不会产生高额开销?

例如,Java服务是否可以将数据分配为ByteBuffer,然后让本机服务通过指针访问它?

感谢

0 个答案:

没有答案