JVM分代
概念:JVM根據對象存活周期不同,把堆內存划分為幾塊。新生代、老年代、永久代。
分代原因:堆內存存放對象實例,是JVM管理的內存中最大一塊,也是垃圾回收最頻繁的一塊。分代是為了提高對象內存分配和垃圾回收的效率。
分代原則:
新生代:新創建的對象。會被頻繁得GC(垃圾回收)。
新生代分為三塊,Eden(占內存80%),From survivor(占內存10%),To survivor(占內存10%),原因是hotspot采用復制算法回收新生代,這樣可以充分利用內存空間,減少浪費。
處理流程:
1. 判斷該對象是否是大對象,大對象直接進入老年代
2. 如果不是大對象,會存儲在Eden區。To survivor是空的
3. 執行GC , Eden和From survivor區中存活下來的對象存在To survivor區
4. From survivor和To survivor調換身份。這樣To survivor又是空的了。
老年代:新創建的對象。經過了多次GC依然存活。不會頻繁做GC。
永久代:靜態屬性、類信息。一般不做GC
示意圖: