Version française
Home     About     Download     Resources     Contact us    
Browse thread
What exactly can be GC'ed?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Ching-Tsun Chou <ctchou@m...>
Subject: What exactly can be GC'ed?

I sent a message to caml-list asking what weak pointers are.  Pierre
Weis kindly pointed out that they had been extensively discussed in
caml-list.  I read those messages and realized that my question is
really about garbage collection (GC):  What exactly can be GC'ed?

Consider the following O'Caml session:

------------------------------------------------------------------------
# let x = ref (String.make 3 'a') ;;
val x : string ref = {contents="aaa"}
# let w = Weak.create 1 ;;
val w : '_a Weak.t = <abstr>
# Weak.set w 0 (Some (!x));;
- : unit = ()
# Weak.get w 0 ;;
- : string option = Some "aaa"
# x := "bbb" ;;
- : unit = ()
# Gc.full_major () ;;
- : unit = ()
# Weak.get w 0 ;;
- : string option = None
------------------------------------------------------------------------

As expected, the string "aaa" is GC'ed.

Now, consider the following (fresh) O'Caml session:

------------------------------------------------------------------------
# let x = String.make 3 'a' ;;
val x : string = "aaa"
# let w = Weak.create 1 ;;
val w : '_a Weak.t = <abstr>
# Weak.set w 0 (Some (x)) ;;
- : unit = ()
# Weak.get w 0 ;;
- : string option = Some "aaa"
# let x = "bbb" ;;
val x : string = "bbb"
# Gc.full_major () ;;
- : unit = ()
# Weak.get w 0 ;;
- : string option = Some "aaa"
------------------------------------------------------------------------

It seems to me that since x has been re-bound to "bbb", its old value
"aaa" is no longer reachable and hence can be GC'ed.  But clearly I
was wrong.  Where did I go wrong?  What exactly can be GC'ed?

I should mention that I'm using O'Caml v.1.05.

- Ching Tsun

========================================================================
  Ching-Tsun Chou                       E-mail: ctchou@mipos2.intel.com 
  Intel Corporation, RN6-16             Tel: (408) 765-5468             
  2200 Mission College Blvd.            Fax: (408) 653-7933             
  Santa Clara, CA 95052, U.S.A.         Sec: (408) 653-8849             
========================================================================