Java Training in Chennai – Garbage Collection Puzzles
Here in this blog we are discussing about Java Training in Chennai – Garbage Collection Puzzles . Some of them are clearly discussed below :
_______________________________________________________________________________
Java Training in Chennai – Garbage Collection Puzzles
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 */
}
When is the B object, created in line 3, eligible for garbage collection?
class HappyGarbage01
{
public static void main(String args[])
{
HappyGarbage01 h = new HappyGarbage01();
h.methodA(); /* Line 6 */
}
Object methodA()
{
Object obj1 = new Object();
Object [] obj2 = new Object[1];
obj2[0] = obj1;
obj1 = null;
return obj2[0];
}
}
Where will be the most chance of the garbage collector being invoked?
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 */
}
}
At what point is the Bar object, created on line 6, eligible for garbage collection?
public class Test
{
public static void main(String[] args) throws InterruptedException
{
Test t = new Test();
// making t eligible for garbage collection
t = null;
// calling garbage collector
System.gc();
// waiting for gc to complete
Thread.sleep(1000);
System.out.println(“end main”);
}
@Override
protected void finalize()
{
System.out.println(“finalize method called”);
System.out.println(10/0);
}
}
public class Test
{
static Test t ;
static int count =0;
public static void main(String[] args) throws InterruptedException
{
Test t1 = new Test();
// making t1 eligible for garbage collection
t1 = null; // line 12
// calling garbage collector
System.gc(); // line 15
// waiting for gc to complete
Thread.sleep(1000);
// making t eligible for garbage collection,
t = null; // line 21
// calling garbage collector
System.gc(); // line 24
// waiting for gc to complete
Thread.sleep(1000);
System.out.println(“finalize method called “+count+” times”);
}
@Override
protected void finalize()
{
count++;
t = this; // line 38
}
}
public class Test
{
public static void main(String[] args)
{
// How many objects are eligible for
// garbage collection after this line?
m1(); // Line 5
}
static void m1()
{
Test t1 = new Test();
Test t2 = new Test();
}
}
How many objects are eligible for garbage collection after execution of line 5 ?
public class Test
{
public static void main(String [] args)
{
Test t1 = new Test();
Test t2 = m1(t1); // line 6
Test t3 = new Test();
t2 = t3; // line 8
}
static Test m1(Test temp)
{
temp = new Test();
return temp;
}
}
How many objects are eligible for garbage collection after execution of line 8?
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();
}
}
after line 11 runs, how many objects are eligible for garbage collection?
public Object m()
{
Object o = new Float(3.14F);
Object [] oa = new Object[l];
oa[0] = o; /* Line 5 */
o = null; /* Line 6 */
oa[0] = null; /* Line 7 */
return o; /* Line 8 */
}
When is the Float object, created in line 3, 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;
}
}
After line 8 runs. how many objects are 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();
}
}
When is the Demo object eligible for garbage collection?
_______________________________________________________________________________________