[gclist] Question from a newbie

Drew Dean ddean@csl.sri.com
Wed, 07 May 2003 08:19:36 -0700 (PDT)

From: "Wang, Daniel Chen-An (Dan)" <dcwang@agere.com>
Subject: Re: [gclist] Question from a newbie
Date: Wed, 7 May 2003 10:49:49 -0400 

> In practice "data which is not reachable" begs the question of what should 
> be  reachable!
> For example:
> void m1() {
> Object obj1 = ...;
> Object obj2 = ...;
>    m2();
>   return obj2;
> }
> void m2() {
>   /* gc gets invoked */
> }
> When m2 is called an the gc is invoked is obj1 reachable?  Well that 
> depends on whether or not the compiler spilled the obj1 variable on the 
> stack or nulled out it's register holding the value. Intuitively obj1 is 
> garbage, because we don't touch it after we return from m2. In fact a good 
> compiler should sprinkle enough information in the stack frames so that 
> even though obj1 may be on the stack the GC doesn't trace it. Obviously, 
> the compiler and the programer have a more interesting "semantic" 
> definition of what is and isn't "garbage". This notion of "garbage" is not 
> at all tied to reachablity.  

Hi Dan!  How's Agere?

I'm not sending this to the list to prevent a flame war, but if I can
pick a language to instantiate your program, let's consider C++, and

Object obj1 = new WaitCursor();

relying on the destructor at the end of m1 to restore the normal
cursor, which, oh by the way, keeps an "invisible" (at the source code
level) reference around.

I don't much like C++, but friends who use it praise this paradigm.

I think we agree: the notion of what's garbage can get quite involved!