javagarbage-collectionscjp

java garbage collection and null reference


In my studying for OCJP I came across the following question:

class CardBoard {
           Short story = 200;
           CardBoard go(CardBoard cb) {
                cb = null;
                return cb;
           }
           public static void main(String[] args) {
             CardBoard c1 = new CardBoard();
             CardBoard c2 = new CardBoard();
             CardBoard c3 = c1.go(c2);
             c1 = null;
            // do Stuff 
}}

When //doStuff is reached, how many objects are eligible for GC?
The correct answer is 2, meaning c1 and its story object.

When line //doStuff is reached, c3 is also null. Why isn't it eligible for GC too?


Solution

  • c3 is a local handle with a null reference, it does not point (and hever has pointed) to an allocated object. Therefore there's nothing to GC.