8

After many cycles of GC, Objects that are survived in young generation are moved to the Old generation memory space.

Please clarify, Minor GC is responsible for this ? or Major GC?

Rohit Shekhar
  • 315
  • 4
  • 15

2 Answers2

6

Please clarify, Minor GC is responsible for this ? or Major GC?

Either of them is responsible for object to move from young gen to old gen.

Have a look at "General Garbage Collection Process" section @ oracle garbage collection tutorial

enter image description here

Summary:

  1. First, any new objects are allocated to the eden space. Both survivor spaces start out empty.

  2. When the eden space fills up, a minor garbage collection is triggered

  3. Referenced objects are moved to the first survivor space. Unreferenced objects are deleted when the eden space is cleared.

  4. At the next minor GC, the same thing happens for the eden space. Unreferenced objects are deleted and referenced objects are moved to a survivor space. However, in this case, they are moved to the second survivor space (S1)

  5. At the next minor GC, the same process repeats. However this time the survivor spaces switch. Referenced objects are moved to S0. Surviving objects are aged. Eden and S1 are cleared.

  6. After a minor GC, when aged objects reach a certain age threshold (8 in this example) they are promoted from young generation to old generation.

  7. As minor GCs continue to occur, objects will continue to be promoted to the old generation space.

  8. Eventually, a major GC will be performed on the old generation which cleans up and compacts that space.

Ravindra babu
  • 37,698
  • 11
  • 250
  • 211
5

Objects can be moved from young to tenured space in either a Minor GC (young space) or Full GC (everything). A Major GC collection only collects in the tenured space.

Smaller objects are created in the Eden space, Large obejcts e.g. arrays in the tenured space.

When the Eden space is cleared out, surviving objects are copied to the survivors spaces. They are copied back and forth between the two survivors spaces until their age (number of times copied) reaches the tenuring threshold and in which case it is copied to the tenured space.

If there is too many objects in the Eden space to be copied to the survivor spaces, a full GC is triggered and all live object go straight to the tenured space.

Considering the size (survivorRatio) survivor size will always be greater than eden

The survivor ratio is how much smaller the survivor space is than the Eden space. e.g. -XX:SurvivorRatio=8 means the survivors space is 1/10th of young generation. There is two survivors spaces (1/10th each) and the Eden space is 8 times larger (8/10ths)

Even if the survivors space was larger than the Eden, it's the amount of free space in the survivor which matters. You could have a survivor space which is 90% full for example (as it still has objects from the last N collections)

So will there be ever a scenario to have that objects directly gets copied from eden to Old if objects are smaller in size (not humongous) ?

If you make the survivor spaces small enough to trigger a full collection each time, the objects will go from Eden to Tenured. I don't recommend going this.

Yalla T.
  • 3,707
  • 3
  • 23
  • 36
Peter Lawrey
  • 525,659
  • 79
  • 751
  • 1,130
  • The last point is not so: objects are simply tenured without Old Gen GC. – Marko Topolnik Oct 08 '16 at 14:27
  • @MarkoTopolnik its a Full GC which checks every object. I have never seen it do otherwise. – Peter Lawrey Oct 08 '16 at 14:55
  • @peterlawrey Thanks for your answer. Could you please give some more information on this :- Minor GC - responsible to manage Young Generation, Major GC - responsible for Old Generation space management. I am confused on work of Full GC, some link says it manages Heap space(Young + Old generation) few says it manages perm generation. – Rohit Shekhar Oct 08 '16 at 14:55
  • @RohitShekhar a Full GC can mean that Classes in Perm Gen get cleaned up. Any GC could but a Full GC is more likely – Peter Lawrey Oct 08 '16 at 15:01