Size of Huge Objects directly allocated to Old Generation

前端 未结 3 1503
轮回少年
轮回少年 2020-11-28 06:09

Recently I\'ve been reading about object allocations in different generations in Java. Most of the times new objects are allocated in Eden (part of Young Generation) and the

3条回答
  •  暖寄归人
    2020-11-28 06:44

    The maximum size of an object HotSpot JVM may allocate in young generation is nearly as large as the size of Eden (YoungGen minus two Survivor spaces).

    That's how the allocation rougly looks like:

    1. Use Thread Local Allocation Buffer (TLAB), if tlab_top + size <= tlab_end
      This is the fastest path. Allocation is just the tlab_top pointer increment.
    2. If TLAB is almost full, create a new TLAB in Eden and retry in a fresh TLAB.
    3. If TLAB remaining space is not enough but is still to big to discard, try to allocate an object directly in Eden. Allocation in Eden is also a pointer increment (eden_top + size <= eden_end) using atomic operation, since Eden is shared between all threads.
    4. If allocation in Eden fails, a minor collection typically occurs.
    5. If there is not enough space in Eden even after Young GC, an attempt to allocate directly in Old generation is made.

提交回复
热议问题