Java垃圾回收机制

Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,在Java的虚拟机中存在自动内存管理和垃圾清扫机制。

Java GC机制主要完成3件事:确定哪些内存需要回收,确定什么时候需要执行GC,如何执行GC。

Java垃圾回收的根节点包括:

  1. 局部变量
  2. 静态变量
  3. Native 方法所引用的对象
  4. 活动线程

Java垃圾回收朴素算法

  1. Mark and sweep(标记清除) 缺点:回收后碎片化会比较严重
  2. Compact(压缩) 缺点:本身做起来会比较复杂
  3. opy(复制) 缺点:内存被切成两半,每次只能用一半。

Java分代回收算法内容

  1. 基础假设:大部分对象只存在很短的时间

  2. 新内存分为新生代、老生代

  3. 将新生代分为Eden,Survivor1、Survivor2

Java垃圾回收机制图

在新生代中,使用“停止-复制”算法进行清理,将新生代内存分为2部分,1部分 Eden区较大,1部分Survivor比较小,并被划分为两个等量的部分。每次进行清理时,将Eden区和一个Survivor中仍然存活的对象拷贝到 另一个Survivor中,然后清理掉Eden和刚才的Survivor。

在新生代中 存活Survivor一定次数会被转入老生代。老生代可以保留很长时间,在老生代中也有它自己的GC。

除了新生代和老生代,还有个持久代,下面来看看持久代用了存什么

持久代

  1. 放置ClassLoader读进来的Class,除了Class外
  2. 放置String.intern后的结构
  3. 易出现OutOfMemoryError:PermGen Space

垃圾回收在什么时候运行?

  1. 内存分配失败时运行
  2. 使用System.gc()

垃圾回收对于什么对象回收?

对于看得见的对象保留,对于看不见的对象回收

这是我对Java垃圾回收机制的一些总结,想要了解更多的可以再查找些资料学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值