logo

CuriousTab

CuriousTab

Discussion


Home Java Programming Garbage Collections Comments

  • Question
  • At what point is the Bar object, created on line 6, eligible for garbage collection?
    class Bar { } 
    class Test 
    {  
        Bar doBar() 
        {
            Bar b = new Bar(); /* Line 6 */
            return b; /* Line 7 */
        } 
        public static void main (String args[]) 
        { 
            Test t = new Test();  /* Line 11 */
            Bar newBar = t.doBar();  /* Line 12 */
            System.out.println("newBar"); 
            newBar = new Bar(); /* Line 14 */
            System.out.println("finishing"); /* Line 15 */
        } 
    }
    


  • Options
  • A. after line 12
  • B. after line 14
  • C. after line 7, when doBar() completes
  • D. after line 15, when main() completes

  • Correct Answer
  • after line 14 

    Explanation
    Option B is correct. All references to the Bar object created on line 6 are destroyed when a new reference to a new Bar object is assigned to the variable newBar on line 14. Therefore the Bar object, created on line 6, is eligible for garbage collection after line 14.

    Option A is wrong. This actually protects the object from garbage collection.

    Option C is wrong. Because the reference in the doBar() method is returned on line 7 and is stored in newBar on line 12. This preserver the object created on line 6.

    Option D is wrong. Not applicable because the object is eligible for garbage collection after line 14.


  • Garbage Collections problems


    Search Results


    • 1. Which statement is true about a static nested class?

    • Options
    • A. You must have a reference to an instance of the enclosing class in order to instantiate it.
    • B. It does not have access to nonstatic members of the enclosing class.
    • C. It's variables and methods must be static.
    • D. It must extend the enclosing class.
    • Discuss
    • 2. Which statement, if placed in a class other than MyOuter or MyInner, instantiates an instance of the nested class?
      public class MyOuter 
      {
          public static class MyInner 
          {
              public static void foo() { }
          }
      }
      

    • Options
    • A. MyOuter.MyInner m = new MyOuter.MyInner();
    • B. MyOuter.MyInner mi = new MyInner();
    • C. MyOuter m = new MyOuter();

      MyOuter.MyInner mi = m.new MyOuter.MyInner();

    • D. MyInner mi = new MyOuter.MyInner();
    • Discuss
    • 3. Which is true about a method-local inner class?

    • Options
    • A. It must be marked final.
    • B. It can be marked abstract.
    • C. It can be marked public.
    • D. It can be marked static.
    • Discuss
    • 4. Which is true about an anonymous inner class?

    • Options
    • A. It can extend exactly one class and implement exactly one interface.
    • B. It can extend exactly one class and can implement multiple interfaces.
    • C. It can extend exactly one class or implement exactly one interface.
    • D. It can implement multiple interfaces regardless of whether it also extends a class.
    • Discuss
    • 5. Which one create an anonymous inner class from within class Bar?
      class Boo 
      {
          Boo(String s) { }
          Boo() { }
      }
      class Bar extends Boo 
      {
          Bar() { }
          Bar(String s) {super(s);}
          void zoo() 
          {
          // insert code here
          }
      }
      

    • Options
    • A. Boo f = new Boo(24) { };
    • B. Boo f = new Bar() { };
    • C. Bar f = new Boo(String s) { };
    • D. Boo f = new Boo.Bar(String s) { };
    • Discuss
    • 6. When is the B object, created in line 3, eligible for garbage collection?
      void start() {  
          A a = new A(); 
          B b = new B(); 
          a.s(b);  
          b = null; /* Line 5 */
          a = null;  /* Line 6 */
          System.out.println("start completed"); /* Line 7 */
      } 
      

    • Options
    • A. after line 5
    • B. after line 6
    • C. after line 7
    • D. There is no way to be absolutely certain.
    • Discuss
    • 7. What allows the programmer to destroy an object x?

    • Options
    • A. x.delete()
    • B. x.finalize()
    • C. Runtime.getRuntime().gc()
    • D. Only the garbage collection system can destroy an object.
    • Discuss
    • 8. When is the Demo object eligible for garbage collection?
      class Test 
      {  
          private Demo d; 
          void start() 
          {  
              d = new Demo(); 
              this.takeDemo(d); /* Line 7 */
          } /* Line 8 */
          void takeDemo(Demo demo) 
          { 
              demo = null;  
              demo = new Demo(); 
          } 
      }
      

    • Options
    • A. After line 7
    • B. After line 8
    • C. After the start() method completes
    • D. When the instance running this code is made eligible for garbage collection.
    • Discuss
    • 9. After line 8 runs. how many objects are eligible for garbage collection?
      public class X 
      {
          public static void main(String [] args) 
          {
              X x = new X();
              X x2 = m1(x); /* Line 6 */
              X x4 = new X();
              x2 = x4; /* Line 8 */
              doComplexStuff();
          }
          static X m1(X mx) 
          {
              mx = new X();
              return mx;
          }
      }
      

    • Options
    • A. 0  
    • B. 1
    • C. 2
    • D. 3
    • Discuss
    • 10. After line 11 runs, how many objects are eligible for garbage collection?
      class X2 
      {
          public X2 x;
          public static void main(String [] args) 
          {
              X2 x2 = new X2();  /* Line 6 */
              X2 x3 = new X2();  /* Line 7 */
              x2.x = x3;
              x3.x = x2;
              x2 = new X2();
              x3 = x2; /* Line 11 */
              doComplexStuff();
          }
      }
      

    • Options
    • A. 0
    • B. 1
    • C. 2
    • D. 3
    • Discuss


    Comments

    There are no comments.

Enter a new Comment