JVM学习(三):垃圾回收机制

JVM学习(三):垃圾回收机制

1.垃圾回收机制的作用

顾名思义,就是用来释放垃圾所占用的内存,防止内存泄漏。有效使用地可使用的内存,对内存堆中已死亡的或者长时间未使用的对象进行清除和回收。它主要针对Java堆和方法区进行回收

2.如何判断一个对象可被回收

  • 1.java里通过可达性分析来判定一个对象是否存活,该算法就是通过一系列的“GC Roots”的对象作为起始点,当一个对象到GC Roots没有任何引用链相连时,该对象就是不可用的,会被回收。

    如下图:虽然object-5、object-6、object-7之间存在引用,但是它们到GC Roots是不可达的,所以它们会被判定为可回收对象

可达性分析

  • 在java语言中,可作为GC Roots的对象包括以下几种:

    • 虚拟机栈(栈帧中的本地变量表)中引用的对象
    • 方法区中类静态属性所引用的对象
    • 方法区中常量引用的对象
    • 本地方法中JNI(本地方法)引用的对象
  • 2.引用计数算法:

    给每个对象添加一个引用计数器,每当有一个地方引用它时,计数器的值就加1;引用失效后,就减1;在任何时刻计数器为0的对象就是不可能再被使用的,这时候就会被GC判断为可回收对象;但这种方式存在一个缺点,它很难解决对象之间相互循环引用的问题,因此,JVM就没有选用它来管理内存

3.垃圾回收算法

  1. 标记–清除算法
  2. 标记–整理算法
  3. 复制算法
  4. 分代收集算法

可以看看这篇博客:垃圾回收算法

另外关于Java堆中的分区:新生代(又分成Eden、s0、s区)和老年代,可以参考下面一篇博文

java-堆里面的分区:Eden,survival(from) to,老年代,各自的特点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值