-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Thanks for the answer; I'm going to look at it in more details once I'm
back from vacation (three weeks from now)!
Kind regards,
Moritz

Rick McGuire schrieb:
> The ooRexx garbage collector is partially generational.  All of the
> objects contained in the flattened rexx.img file are restored into a
> separate object space and given a special mark ("OldSpace") that
> indicates these objects are never to be garbage collected.  They are
> also not traced during a garbage collection cycle, which can cause a
> problem if a reference to an object residing in the normal object heap
> is ever stored in a field of an oldspace object.  Without special
> attention, these objects could end up getting garbage collected
> inappropriately.
> 
> To solve this problem, the OrefSet macro is used to detect the
> situation where a new space object is being stored in an oldspace
> object.  This implements a write barrier that detects that situation
> and adds the object to a special table that tracks all references from
> the oldspace to the newspace.  The reference count is a counter of how
> many references we have.  The OrefSet barrier also detects if the
> field being written into crosses that barrier so that the reference
> counts can be decremented.
> 
> OrefSet is necessary for setting any reference field in a class that
> might get stored in the saved image.  Classes that don't implement
> this properly can result in some very nasty (and hard to debug)
> garbage collection problems.  Generally, it is good practice to use
> OrefSet whenever you are setting an object reference.  The one
> exclusion are any of the classes in the <Transient> grouping in
> PrimitiveClasses.xml.  These are classes that represent runtime state,
> and will never be stored in the image file.  These classes are
> permitted to just directly assign the fields without requiring
> OrefSet().  That is the only exception, but you need to understand the
> situation when deciding not to use OrefSet().  If not certain of
> whether it is required, then use it, since it is never an error to use
> it, but it might be an error to omit it.
> 
> Rick
> 
> On Tue, Jun 30, 2009 at 8:38 AM, Moritz Hoffmann<antig...@gmail.com> wrote:
> Hi all,
> I have been browsing through the ooRexx source code and came to some
> point where RexxMemory::setOref() is called. I think this was from
> whithin the macro OrefSet.
> 
> It would be nice if someone could explain what the method does! I see
> that it maintains some reference count. What is this used for? I though
> thought the ooRexx reference handling and object deallocation was based
> on reachability, and not on reference counting...?
> 
> Thanks in advance,
> Moritz

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkpMZCcACgkQl56sB+DIUZRKrwCfU2FLOSJ5kVWsNOWbd/Bnr3GP
Xg4AnRGxq6yjJf9uJJLyJkiehfsh8vI5
=1uxu
-----END PGP SIGNATURE-----

------------------------------------------------------------------------------
_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to