hi Yurui,

I don't know if anyone has worked out a way to permanently transfer
ownership from memory allocated by the Java or C++ libraries. This is
partially what Plasma is for. I am not sure how Gandiva is currently
dealing with memory management between Java and C++ in-process. If
someone wants to comment that would be helpful.

- Wes

On Tue, Jul 17, 2018 at 12:19 AM, 周宇睿(闻拙) <yurui....@alibaba-inc.com> wrote:
> Hi Wes:
>
> Thank you for the response. Yes the examples you provided are very helpful.
>
> But I still have a question regarding memory management. Let’s say passed
> memory addresses from c++ to JVM and constructed the data structure in Java.
> Since this is an off heap memory, how could I make sure the memory will be
> released when necessary?
>
> thanks
> Yurui
>
> from Alimail macOS
>
> ------------------Original Mail ------------------
> Sender:Wes McKinney <wesmck...@gmail.com>
> Send Date:Tue Jul 17 02:09:51 2018
> Recipients: <dev@arrow.apache.org>
> Subject:Re: Passing Arrow object across language
>>
>> I discussed some of these things at a high level in my talk at SciPy
>> 2018 last week
>>
>>
>> https://www.slideshare.net/wesm/apache-arrow-crosslanguage-development-platform-for-inmemory-data-105427919
>>
>> On Mon, Jul 16, 2018 at 2:08 PM, Wes McKinney <wesmck...@gmail.com> wrote:
>> > hi Yurui,
>> >
>> > You can also share data structures through JNI without using the IPC
>> > tools at all, which could require memory copying to produce the IPC
>> > messages.
>> >
>> > What you can do is obtain the memory addresses for the component
>> > buffers of an array (or vector, as called in Java) and construct the
>> > data structure from the memory addresses on the other side. We are
>> > doing exactly this already in Python using JPype (which is JNI-based):
>> >
>> > https://github.com/apache/arrow/blob/master/python/pyarrow/jvm.py
>> >
>> > The Gandiva project uses JNI to pass Java Netty buffer memory
>> > addresses to C++, you can see the code for creating the arrays from
>> > the memory addresses and then constructing a RecordBatch:
>> >
>> >
>> > https://github.com/dremio/gandiva/blob/master/cpp/src/jni/native_builder.cc#L602
>> >
>> > I believe as time goes on we will have better and more standardized
>> > APIs to deal with JNI<->C++ zero-copy passing, these implementations
>> > have only been done relatively recently. Your contributions to the
>> > Arrow project around this would be most welcomed!
>> >
>> > Thanks,
>> > Wes
>> >
>> > On Mon, Jul 16, 2018 at 2:00 PM, Philipp Moritz <pcmor...@gmail.com>
>> > wrote:
>> >> Hey Yuri,
>> >>
>> >> you can use the Arrow IPC mechanism to do this:
>> >>
>> >> - https://github.com/apache/arrow/blob/master/format/IPC.md
>> >> - Python: https://arrow.apache.org/docs/python/ipc.html
>> >> - C++: https://arrow.apache.org/docs/cpp/namespacearrow_1_1ipc.html
>> >> - For Java, see the org.apache.arrow.vector.ipc namespace
>> >>
>> >> On the C++ side, you can for example use a RecordBatchStreamWriter to
>> >> write
>> >> the IPC message, and then on the Java side you could use the
>> >> ArrowStreamReader to read it.
>> >>
>> >> There are some tests here:
>> >>
>> >> https://github.com/apache/arrow/blob/master/cpp/src/arrow/ipc/ipc-read-write-test.cc
>> >>
>> >> https://github.com/apache/arrow/tree/master/java/vector/src/test/java/org/apache/arrow/vector/ipc
>> >>
>> >> There is also integration tests here, although I'm not really familiar
>> >> with
>> >> them:
>> >>
>> >> https://github.com/apache/arrow/tree/master/integration
>> >>
>> >> If you could write a little tutorial/into on how to do this (maybe
>> >> using
>> >> Plasma for exchanging the data) and contribute it to the documentation,
>> >> that would be amazing!
>> >>
>> >> Best,
>> >> Philipp.
>> >>
>> >> On Mon, Jul 16, 2018 at 4:14 AM, 周宇睿(闻拙) <yurui....@alibaba-inc.com>
>> >> wrote:
>> >>
>> >>> Hi guys:
>> >>>
>> >>> I might miss something quite obviously. But how does Arrow passing
>> >>> objects
>> >>> across language? Let’s say I have a java program that invoke a c++
>> >>> function
>> >>> via JNI, how does the c++ function pass an Arrow RecordBack object
>> >>> back to
>> >>> Java runtime without memory copy?
>> >>>
>> >>> Any advise would be appreciated.
>> >>> Thanks
>> >>> Yurui
>> >>>
>> >>> from Alimail macOS

Reply via email to