1.jvm内存组成
堆:除基本类型之外所有new的对象存储在堆。
栈:存储一些局部变量 +临时存储
本地方法栈:只要支持其他语言的方法,存储native方法的状态
方法区:存放类信息,静态信息,final常量信息,属性,方法等。主要存放于持久代。
程序计数器:pc
2.回收
堆是由新生代和旧生代组成,new对象都是在新生代中分配空间。
新生代由eden ,survivor组成。survivor(fromSpace+toSpace)
新生代中的数据存活时间较短,旧生代存活时间相对长。
2.1新生代GC:
新生代存活时间较短,直接用copying算法回收。
copying算法:扫描新生代存活对象,将存活对象复制到一块新的未使用空间。
新生代采用空闲指针控制触发GC机制,指针保持最后一个对象的分配空间在新生代中。但new是无空间,则触发gc回收。新生代空间不够时,空间分配会由eden-->survivor-- ->旧生代
新生代GC分类:串行GC,并行GC,并行回收GC
2.2旧生代GC:
旧生代中的对象存活时间较长,用mark算法回收。
mark算法:扫描mark存活的对象,回收未标记的对象回收,回收后对空余的空间合并,或者标记便于下次使用,避免碎片影响效率。
旧生代GC分类:串行GC,并行GC,并发GC
串行GC,单线程,等待时间长,适用单Cpu,新生代较小
并行|并发GC,多线程,速度快