Re: GC and JNI

"Perry E. Metzger" <[email protected]> 11 Jul 2003 17:54:54 -0400
Newsgroups gmane.comp.programming.garbage-collection.general
Message-ID <[email protected]>
Okehee Goh <[email protected]> writes:
> Hello,
> I just read this mail describing GC handle accessed by a native method.
> I am curious that how a garbage collector is able to notice that GC handles
> are not referenced by native methods. Does the garbage collect have to
> maintain GC handles as a root set like global variables so that they can be
> traced? But if so, those handles will be always considered as live. What can
> be a solution?

I think the mail message explained this explicitly -- handles are
considered live only for the length of the method invocation.

.pm


>  Thank you for your help in advance.
> 
>  Regards,
> 
>  Okehee
> 
> 
> -----Original Message-----
> From: [email protected] [mailto:[email protected]]On
> Behalf Of Chris Dodd
> Sent: Thursday, May 29, 2003 1:22 PM
> To: Zoe C. H. Yu
> Cc: [email protected]
> Subject: Re: [gclist] GC and JNI
> 
> 
> On Fri, 30 May 2003, Zoe C. H. Yu wrote:
> > Java supports JNI.  I would like to know how does Java's GC handle those
> > objects created in the Java Native codes?  Do those objects can only be
> > reclaimed conservatively?  Or they can be reclaimed precisely with
> > compiler support?  Thanks very much!
> 
> The JNI interface insulates the GC of the JVM from the native code and
> vice versa.  The native code can never see an actual pointer into the
> GC heap -- instead, the JVM passes opaque handles to the native code that
> cannot be directly dereferenced.  To do anything with the handle, the native
> code needs to call a JVM function (through the JNI interface) to actually
> do the job.
> 
> The JVM keeps track of the handles it has passed to a native method and
> cleans them up when the method finishes.  If a native method wants to
> keep a handle alive after it returns (to store in a global non-java
> data structure for reference by later native method calls), it needs
> to explicitly create a global handle (via JNI callback) and explicitly
> destroy that global handle when its done.
> 
> Chris Dodd
> [email protected]
> 

-- 
Perry E. Metzger		[email protected]