java (gc)机制

整理一份适合自已比较适合的gc文章

一、为什么要进行垃圾回收

内存是有限制的,不可能让你一直分配内存空间而不进行回收,否则会导致oom(内存溢出:应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。)

二、如何判断一个对象是否可以被回收

2.1、 引用计数算法

对每个对象保存了一个整型的引用计数器属性。用于记录对象被引用的情况。对于一个对象A,只要有任何一个对象引用了A,A的引用计数器就+1,当引用失效时其引用计数器就-1。当其引用计数器值为0时,即表示A不再被引用,可以回收。但其无法处理循环引用的问题,导致在jvm中没有使用这类算法。

循环引用即为几个变量的引用形成一个循环,造成变量一直在被引用不被回收从而造成内存泄露。

在这里插入图片描述

2.2、 可达性分析算法

以GC root作为起始点,从上至下的方式搜索这些对象是否可达,搜索走过的路径为引用链**,GC roots到对象不可达时,则证明此对象是不可用的。**
在这里插入图片描述

堆空间外的一些结构,比如虚拟机栈、本地方法栈、方法区、字符串常量池等地方对堆空间进行引用的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值