jvm02--垃圾收集器与内存分配策略

jvm02–内存分配和回收

标签: jvm java


一.GC需要完成的3件事情

  1. 哪些内存需要回收
  2. 什么时候回收
  3. 如何回收

二.各区域内存特点(需回收的内存)

程序计数器、虚拟机栈、本地方法栈3各区域随线程而生,随线程而灭。这几个区域的内存分配回收具有确定性。而java堆和方法区的内存分配和回收都是动态的,垃圾收集器关注的是这部分内存。

三.对象狗带了吗(回收的时机)

1. 引用计数法(存在对象相互循环引用的问题,如对象A引用B,对象B引用A,原本一起狗带,结果相伴到永远,你中有我我中有你)
2. 可达性分析算法(jvm采用)
    根节点对象一般为以下几种
    *  虚拟机栈(栈帧中的本地变量表)中引用对象
    *  方法区中类静态属性引用对象
    *  方法区中常量引用对象
    *  本地方法栈中JNI(即一般说的Native方法)引用对象
3. 引用分类:强引用,软引用,弱引用,虚引用
4. 方法区回收
    * 废弃常量
    * 无用的类(条件苛刻)
      * 该类所有实例都已经回收
      * 加载该类的ClassLoader已经被回收
      * 该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类方法。

四.垃圾收集算法

1. 标记-清除算法(Mark-Sweep)
2. 复制算法 (新生代)(Survivor空间不够时,依赖其它内存进行分配担保)
3. 标记-整理算法(Mark-Compact)(老年代)

五.内存分配与回收策略

1. 对象优先在Eden分配
2. 大对象直接进入老年代(如长字符串以及数组)
3. 长期存活的对象进入老年代
4. 如果Survivor空间中相同年龄所有对象大小总和大于Survivor空间一半,则年龄大于或等于该年龄的对象直接进入老年代
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值