理解JVM底层(2)

理解JVM底层

垃圾回收原理和算法

垃圾回收的作用

内存管理

java的内存管理很大程度指的就是对象的管理,其中包括对象空间的分配和释放。
   对象空间的分配:使用new关键字创建对象即可
   对象空间的释放:将对象赋值null即可。垃圾回收器将负责回收所有”不可达”对象的内存空间

垃圾回收过程:

  • 新创建的对象,绝大多数都会存储在Eden中,
  • 当Eden满了(达到一定比例)不能创建新对象,则触发垃圾回收(GC),将无用对象清理掉,
    然后剩余对象复制到某个Survivor中,如S1,同时清空Eden区
  • 当Eden区再次满了,会将S1中的不能清空的对象存到另外一个Survivor中,如S2,
    同时将Eden区中的不能清空的对象,也复制到S1中,保证Eden和S1,均被清空。
  • 重复多次(默认15次)Survivor中没有被清理的对象,则会复制到老年代Old(Tenured)区中,
  • 当Old区满了,则会触发一个一次完整地垃圾回收(FullGC),之前新生代的垃圾回收称为(minorGC)
    在这里插入图片描述

垃圾收集器的种类:

Serial 收集器
ParNew收集器
Parallel Old 收集器
CMS收集器
G1收集器

GC的两种判定方法:

  • 引用计数法:指的是如果某个地方引用了这个对象就+1,如果失效了就-1,当为 0 就
    会回收但是 JVM 没有用这种方式,因为无法判定相互循环引用(A 引用 B,B 引用 A)
    的情况
  • 引用链法: 通过一种 GC ROOT 的对象(方法区中静态变量引用的对象等-static 变
    量)来判断,如果有一条链能够到达 GC ROOT 就说明,不能到达 GC ROOT 就说明
    可以回收

GC 的四种收集方法:

  1. 标记-清除:
    这是垃圾收集算法中最基础的,根据名字就可以知道,它的思想就是标记哪些要被
    回收的对象,然后统一回收。这种方法很简单,但是会有两个主要问题:1.效率不
    高,标记和清除的效率都很低;2.会产生大量不连续的内存碎片,导致以后程序在
    分配较大的对象时,由于没有充足的连续内存而提前触发一次 GC 动作。
  2. 复制算法:
    为了解决效率问题,复制算法将可用内存按容量划分为相等的两部分,然后每次只
    使用其中的一块,当一块内存用完时,就将还存活的对象复制到第二块内存上,然
    后一次性清楚完第一块内存,再将第二块上的对象复制到第一块。但是这种方式,
    内存的代价太高,每次基本上都要浪费一般的内存。
    于是将该算法进行了改进,内存区域不再是按照 1:1 去划分,而是将内存划分为
    8:1:1 三部分,较大那份内存交 Eden 区,其余是两块较小的内存区叫 Survior 区。
    每次都会优先使用 Eden 区,若 Eden 区满,就将对象复制到第二块内存区上,然
    后清除 Eden 区,如果此时存活的对象太多,以至于 Survivor 不够时,会将这些对
    象通过分配担保机制复制到老年代中。(java 堆又分为新生代和老年代)
  3. 标记-整理
    该算法主要是为了解决标记-清除,产生大量内存碎片的问题;当对象存活率较高
    时,也解决了复制算法的效率问题。它的不同之处就是在清除对象的时候现将可回
    收对象移动到一端,然后清除掉端边界以外的对象,这样就不会产生内存碎片了。
  4. 分代收集
    现在的虚拟机垃圾收集大多采用这种方式,它根据对象的生存周期,将堆分为新生
    代和老年代。在新生代中,由于对象生存期短,每次回收都会有大量对象死去,那
    么这时就采用复制算法。老年代里的对象存活率较高,没有额外的空间进行分配担
    保,所以可以使用标记-整理 或者 标记-清除

java 垃圾回收机制

在 java 中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在
JVM 中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚
拟机空闲或者当前堆内存不足时,才会触发执行,扫面那些没有被任何引用的对象,并将
它们添加到要回收的集合中,进行回收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值