Questions about GC, _Jv_MarkObj() and reflection data.

David Daney
Tue Feb 7 05:55:00 GMT 2006

I think my patch for removing most reflection data is almost working 

My last problem seems to be with classes that use _Jv_MarkObj(). 
Currently I emit no reflection data for non-static fields.  However this 
does not work if the GC descriptor has a value of 2 (which appears to 
mean to use _Jv_MarkObj()), as _Jv_MarkObj uses the field reflection 
data to tell if a field contains a reference.

Lets just say I was a little mystified until I realized the GC was 
freeing referenced objects and allocating objects of a different type in 
their place.

The obvious solution is to generate reflection data for non-static 
fields that contain references.  But I wanted to do a sanity check 
before proceeding.

Currently in make_class_data (in class.c) the call to get_dispatch_table 
(which creates the vtable and thus the GC descriptor) is done after all 
the reflection data is generated.  My plan is to move it before the 
field and method arrays are built.  Then it should be fairly simple to 
extract the GC descriptor from the dispatch table tree and use that to 
decide if field reflection data is needed for reference fields.

Does anyone foresee a problem with doing it this way?

David Daney

More information about the Java mailing list