JNI memory allocation
Simon Gornall
gcj@gornall.net
Sat Jun 14 21:40:00 GMT 2003
Hi all,
I'm porting a java wrapper for the (http://www.libsdl.org) SDL library
to JNI, and was hoping to use things like JvNewByteArray for the memory
allocated within the native C++ calls. It struck me, though, that the
existing code passes handles (as jint's) back from the C++ code to the
java world, and vice versa when calling native code. If this is the
case, won't the garbage collector consider the memory (which is only
referenced via the handle, which Java thinks is an int, not a pointer)
fair game for collection at any time ?
As an example, there are constructs like:
jint sdl::event::EventDispatcher::SDLPollEvent(jint handle)
{
SDL_Event *event = NULL;
if (handle==0)
{
// old code commented out and replaced by JvNewByteArray
// event = (SDL_Event *)malloc(sizeof(SDL_Event));
jbyteArray array = JvNewByteArray(sizeof(SDL_Event));
event = (SDL_Event *) elements(array);
}
else
event = (SDL_Event *)handle;
if (event != NULL)
{
event->type = SDL_NOEVENT;
SDL_PollEvent(event);
return (jint)event;
}
return 0;
}
Once the handle is returned, it's used to refer to the event later on
for processing as different types etc.
So, is it safe to use JvNewByteArray in this sort of context, or is it
dangerous ?
Thanks in advance for any help - much appreciated :-))
ATB,
Simon
More information about the Java
mailing list