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
示意图: