[zeromq-dev] Zero Copy in Java jzmq
Trevor Bernard
trevor.bernard at gmail.com
Fri Feb 15 18:01:54 CET 2013
> I'm thinking of extending jzmq to optionally allow the zero-copy
> technique using the concepts outlined by Martin Thompson here:
That's awesome
> I'm not 100% sure I'll do it, I need some more experimentation first,
> but is there any interest or words of advice if someone's tried this
> already?
I'd love for send/recv to have a ByteBuffer API.
Some resources and general suggestions:
Have a peak at zmq_msg_t in zmq.h.
Defines ZMTP/2.0 Spec:
* http://rfc.zeromq.org/spec:15
Also depending on the size of the msg, it may be allocated on the stack or heap.
* http://api.zeromq.org/3-2:zmq-msg-init-size
At some point you'll have to access a malloc'ed array from Java/JNI.
* http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/functions.html#nio_support
Something like this would do the trick. This wraps a native pointer in
a ByteBufer
void *data = ...
jobject bb = (*env)->NewDirectByteBuffer(env, (void*) data, sizeof(zmq_msg_t));
Here is another option: Use a library like javolution to do your mapping:
http://javolution.org/target/site/apidocs/javolution/io/Struct.html
class Message extends Struct {
Unsigned8 _ = new Unsigned8(32);
Message() {
setByteBuffer(Message.nativeBuffer(), 0);
}
private static native ByteBuffer nativeBuffer();
}
Something along those lines.
Hope this helps.
-Trev
More information about the zeromq-dev
mailing list