一、jvm中方法区、堆与栈的主要存储对象
方法区:已经加载的类的一切信息,包括类的修饰符 是类还是接口 类名 继承的父类名 引用的接口 类的字段信息 类的方法列表 方法信息 静态变量(final) 常量(static)
堆:类的对象、对象中的成员变量
栈:局部变量(基本数据类型和对象的引用),方法,方法返回值,程序运行状态
二、java中的四种引用
强引用:不会被GC回收,内存不足就OOM
软引用(SoftReference):内存不足时,会被GC回收
弱引用(WeakReference):GC回收就会被回收
虚引用:相当于没有引用
三、对象分配规则
1.对象有限分配Eden区,内存不足进行MinorGC
2.大对象直接进入老年代,防止新旧代复制
3.长期存活进入老年代,计数器经理MinorGC会加1
4.动态判断对象年龄,Survivor中相同年龄的所有对象大小的总和大于Survivor空间的一半,年龄大于该年两的对象进入老年代。
5.空间分配担保,如果移入老年代的对象大于剩余值进行FullGC
四、垃圾收集算法
1.标记-清除:先标记一起移除 主要用于老年代
2.复制:内存分成相同大小,获得移动到另一边,旧的这边清空,主要用于新生代
3.标记-压缩:先标记,然后移动到一边,清空边界 老年代
4.分代收集:新生代老年代各自清理
五、JVM判断对象是否可以回收
1.标记计数法:对象被引用引用计数器就+1,释放就-1,为0回收。
2.根搜索法
根节点 GC Roots:栈帧引用的对象,全局静态的对象,常量引用,本地方法引用的对象