# What exactly can be GC'ed?

From: Ching-Tsun Chou (ctchou@mipos2.intel.com)
Date: Tue Dec 23 1997 - 19:57:07 MET

Date: Tue, 23 Dec 1997 10:57:07 -0800 (PST)
Message-Id: <199712231857.KAA15696@zws197.sc.intel.com>
From: Ching-Tsun Chou <ctchou@mipos2.intel.com>
To: caml-list@inria.fr
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
========================================================================

This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:13 MET