Java 垃圾回收(GC)

简单介绍一下Java垃圾回收的机制,个人最近课程中介绍了这部分内容,便结合课件和网上资料做了简单的整理,思路主要依据学校介绍的思路,并不十分深入,这里简单介绍内存管理机制以便后面的理解。
 Java内存管理:
 1)对象在堆中申请。
 2)对象的引用是指向对象的指针,一般是对象在堆中的首地址。
 3)变量包含对象的引用。
 4)每个对象可以包含变量和其他对象的引用。
 5)一个引用至多指向一个对象,一个对象可以关联许多引用。
 Java采用垃圾自动回收机制,对于编程人员来说这无疑是一大便捷之处,理解其机制也有助于编写性能更好的程序。
 介绍一下实体(entity)的概念:属性,参数,局部变量和结果等在代码中的名字。其值为对象或对对象的引用。
 栈是方法调用和局部变量的存储之处,调用方法时进行压栈,得到结果后出栈,在出栈时自然而然地进行了内存回收(顺便感叹一下栈调用真的是极其伟大的创造),详情推荐阅读《深入理解计算机系统》。
 对象存储在堆中,重点就在于对象的回收,
 可达对象:根集合由root对象和局部变量构成,可达对象可以递归的定义为Reachable={N∈Obejects | (存在r∈Roots.r->N)∪(存在M∈Reachable.M->N)},简单来说,将所有对象视为一个有向图,通过根集合可以到达的对象即为可达对象。其余的全部为不可达对象。
 可达对象需要保留,不可达对象需要回收。
 复制算法:找出所有的可达对象,将其复制到另一个堆中,讲旧堆全部清空。
 标记清除算法:在根集合开始,标记找出所有可达对象,将所有未标记的回收,已标记的清除标记。
 标记压缩算法:在根集合开始,标记找出所有可达对象,将所有未标记的回收,已标记的清除标记并移到堆前面从而使堆连续减少碎片。
 Java垃圾回收将堆划分成不同的区域(不同的generation ),以便GC可以更快地识别可以删除的对象,即young generation年轻带, old generation老年带, and permanent generation永久带。
 新申请的对象将其放置在年轻带,垃圾回收时通常会发现大量死亡对象,采用复制算法,老年代则存活率较高,采用标记压缩或标记清除算法。
 当三个空间中任何一个已满且存在空间需求时,都会发生垃圾回收,Minor GC针对年轻带,Minor GC后存活的对象提升至老年带,Full GC针对老年代和永久代,当没有空间提供给minor GC将对象提升到老年代中,或者永久代中无空间保存class元数据时。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值