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

可达性分析算法
来判断对象是否存活。这个算法的基本思路是通多一系列的称为“gc roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到gc roots没有任何引用链项连时(图论来说,从gc到这个对象不可达),则证明此对象是不可用的。
JAVA语言中,可作为gc roots的对象包括下面几种:

  • 虚拟机栈(栈帧中的本地变量表)中引用的对象。
  • 方法区中类静态属性引用的对象。
  • 方法区中常量引用的对象。
  • 本地方法栈中JNI引用的对象

强引用 软引用softReference 弱引用weakReference 虚引用phantomReference 强度依次减弱

任何一个对象的finalize()方法都只会被系统自动调用一次,如果对象面临下一次回收,他的finalize()方法不会被再次执行。

长期存活的对象将进入老年代,对象在survivor区中每熬过一次minor gc,年龄就增加一岁。年龄增加到一定程度,默认15岁,就将会被晋升到老年代中。进入老年代的阈值可通过-XX:MaxTenuringThreshold设置。

在发生minor gc之前,虚拟机1会先检查老年代最大可用的连续空间是否大于新生代的所有对象总空间,如果成立,那么minor gc可以确保是安全的。如果不成立,虚拟机会查看handlepromotionfailure设置值是否允许担保失败,如果允许,那么会继续检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均水大小,如果大于,将会尝试进行一次minor gc,尽管这次minor gc是有风险的;如果小于,或者handlepromotionfailure设置不允许冒险,那这时也要改为进行一次full gc。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值