On 1/25/07, Xiao-Feng Li <[EMAIL PROTECTED]> wrote:
Hi, The current root set enumeration code has no special treatment with magic Address fields. They are taken as normal object reference fields. This is incorrect since their values are memory addresses that are not necessarily pointing to objects. Actually we probably need to keep the contract the Address field should never contain an object reference, so to skip them in enumeration doesn't miss any live objects. (They can contain an address that happens to be an object reference, but this object reference is enumerable from other roots or object fields.) Do you agree with this contract and should we modify the root set enumeration code to skip Address fields? Thanks, xiaofeng
Xiao-Feng, JIT does not report objects with type of Address today, because JIT knows them like UnmanagedPointers but not like Objects. Address/Offset/Reference and other magics types could be enumerated only if 1) We have a field of magic type. 2) VM reports it as part of protected JNI arguments. When I wrote helpers with magics I cared not to use any of the cases above. In the case when I have to save an address to the field I saved its 'int' representation. But If we want to enable fast-path helpers on EM64T we have to support at least case 1) I see only one solution here: GC must care about magic types and sizes. -- Mikhail Fursov
