Java中的內存分配有兩個部分:堆和棧。堆是Java虛擬機中用于存儲對象的內存區域。堆內存分為新生代和老年代兩部分。
新生代內存是用于存儲新創建的對象的區域,它又分為Eden空間和Survivor空間。在Java虛擬機啟動時,新生代占用全局堆內存的一部分。
+------+ +-------+ | Eden | -->Survivor| +------+ +-------+
新創建的對象會被存儲在Eden空間,當Eden空間滿后,存活的對象會被移動到Survivor空間。Survivor空間分為From和To兩部分,每次GC后,From空間和Eden空間交換,即將兩者中的存活對象移動到To空間。
+-------+ +-------+ |From<-- |To | +-------+ +-------+
在對象經過多次GC后,如果依然存活,則會被移動到老年代中。老年代內存用于存儲長生命周期的對象,它是相對穩定的。