目录

  • 1 被判定为垃圾的标准
  • 2 判定对象是否为垃圾的算法
    • 2.1 引用计数法
    • 2.2 可达性分析算法
  • 3 垃圾回收的算法
    • 3.1 标记-清除算法(Mark and Sweep)
    • 3.2 复制算法(Copying)适用于对象存活率低的场景(年轻代中),因为需要复制的对象少。年轻代与老年代后面会介绍到。
    • 3.3 标记整理(Compacting)适合存活率高(例如老年代中)
    • 3.4 分代收集算法(Generational Collector)、堆模型
  • 4 常见垃圾回收器
    • 垃圾收集器
  • 5 强引用、软引用、弱引用、虚引用作用

1 被判定为垃圾的标准

没有被其它对象引用

2 判定对象是否为垃圾的算法

  • 引用计数法
  • 可达性分析算法

2.1 引用计数法

通过判断对象的引用数量来决定对象是否可以被回收
每个对象实例都有一个引用计数器,被引用则+1,完成引用则-1。
任何引用计数为0的都可以被当做是垃圾。

优点
执行效率高(只需要查找出引用计数为0的即可),程序受影响小
缺点
当出现循环引用的时候(父对象有一个对子对象的引用,子对象又反过来引用父对象。或者出现两个对象相互引用),引用计数不可能为0,也就是不能被回收,可能造成内存泄露
比如:

2.2 可达性分析算法

通过判断对象的引用链是否可达来判断对象是否可回收

什么对象可以作为GC 的root对象

3 垃圾回收的算法

3.1 标记-清除算法(Mark and Sweep)

标记:从根集合进行扫描,对存活的对象进行标记。
清除:对堆内存进行线性遍历,回收不可达对象内存。

3.2 复制算法(Copying)适用于对象存活率低的场景(年轻代中),因为需要复制的对象少。年轻代与老年代后面会介绍到。

  • 分为对象面和空闲面
  • 对象在对象面中创建
  • 存活的对象会被复制到空闲面
  • 复制之后将对象面中所有对象全部清除

3.3 标记整理(Compacting)适合存活率高(例如老年代中)

标记:从根集合进行扫描标记存活的对象
清除:移动所有存活的对象,按照内存地址次序依次排列,然后将末端地址以后的所有对象清除

3.4 分代收集算法(Generational Collector)、堆模型

年轻代、老年代、永久代?


年轻代:进可能快速收集生命周期短的对象
一般分为:一个Eden区,两个survivor区
年轻代回收演示(Minor GC):

对象在什么时候会进入老年代
1、当年龄到达默认最大值时,对象会晋升老年代。默认15,可通过该参数设置

2、Survivor中放不下的
3、新生成的大对象
分代收集算法特点

**老年代:**存放生命周期较长的对象,使用标记-清理或标记-整理方法
Major GC 是清理永久代。
Full GC 是清理整个堆空间—包括年轻代和永久代。
Full GC比 Minor GC慢 ,但执行频率低
触发条件:

常用调优参数

分代收集的GC分类:

  • Minor GC (年轻代中的垃圾收集,采用复制算法)
  • Full GC 老年代中,由于对老年代的回收一般会伴随年轻代,所以叫做Full GC

4 常见垃圾回收器

stop-the-world

safepoint(安全点)

JVM的运行模式

  • server 启动慢,使用重量级的虚拟机,但是运行稳定之后比client执行速度快
  • client 启动快
    使用 java -version 就可以查看使用的是那种模式

垃圾收集器

年轻代收集器



老年代常用收集器


一般在硬件比较牛逼的时候(内存大):

Garbage First

会改变java堆内存布局

关系

5 强引用、软引用、弱引用、虚引用作用





Java的垃圾回收机制、年轻代与老年代相关推荐

  1. jvm对象从新生代到老年代_JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代...

    内存模型 JVM运行时数据区由程序计数器.堆.虚拟机栈.本地方法栈.方法区部分组成,结构图如下所示. JVM内存结构由程序计数器.堆.栈.本地方法栈.方法区等部分组成,结构图如下所示: 1)程序计数器 ...

  2. Java GC垃圾回收机制

    Java提供了gc机制,jvm 中,程序计数器.虚拟机栈.本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理,因此,我们的内存垃圾回收主要集中于 jav ...

  3. JAVA虚拟机垃圾回收机制和JAVA排错三剑客

    一.Java虚拟机逻辑回收机制 1.Java垃圾回收器 Java垃圾回收器是Java虚拟机(JVM)的三个重要模块(另外两个是解释器和多线程机制)之一,为应用程序提供内存的自动分配(Memory Al ...

  4. Java的垃圾回收机制详解——从入门到出土,学不会接着来砍我!

    文章目录 哪些内存需要回收 回收堆:垃圾的定义 引用计数算法: 可达性分析算法: GC Roots的对象 回收方法区:垃圾的定义 如何回收垃圾 垃圾回收算法总结 标记-清除算法(适用老年代,但是基本废 ...

  5. 【Java】Java的垃圾回收机制小结

    文章目录 1. Java的垃圾回收机制? 1.1 Java的引用类型 1.2 哪些内存需要回收? 1.3 怎么定义垃圾? 1.4 怎么回收垃圾? 2. JVM一次完整的GC流程? 3.触发GC之后,会 ...

  6. java的垃圾回收机制包括:主流回收算法和收集器(jvm的一个主要优化方向)

    2019独角兽企业重金招聘Python工程师标准>>> java的垃圾回收机制是java语言的一大特色,解放了开发人员对内存的复杂控制,但如果你想要一个高级java开发人员,还是需要 ...

  7. [Java基础] 垃圾回收机制

    ​写在前面 本文简单介绍一下Java的垃圾回收机制相关概念. ​ 活动地址:CSDN21天学习挑战赛 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩:迟一天就多一天平庸的困扰.各位小伙伴,如果您 ...

  8. Java的垃圾回收机制介绍

    1.java的语言框架 (1)CPU->操作系统内核->应用层框架->JVM(java虚拟机)->Java字节码->Java源代码 (2)java是解释型语言,嵌入式常用 ...

  9. Java --- JVM年轻代与老年代

    一.年轻代与老年代 1.存储在VM中的Java对象可以被划分为两类:①.一类是生命周期较短的瞬时对象,这类对象的创建和消亡都非常迅速.②.另外一类对象的生命周期却非常长,在某些极端的情况下还能够与VM ...

最新文章

  1. py-faster-rcnn + ZF 实现自己的数据训练与检测(一)
  2. php 目录管理,[PHP文件管理器]①--遍历目录
  3. OMNeT++学习程序 4
  4. 纳德拉:微软正计划“终极移动设备”
  5. ksu7对讲机调频软件_建伍TK3107对讲机调频及软件处理设置
  6. Mysql区分大小写问题
  7. 「微服务」修改服务注册到nacos默认的命名空间和分组名称
  8. Redis Cluster集群(Linux设计搭建)
  9. mysql的封锁协议_【眼见为实】数据库并发问题 封锁协议 隔离级别
  10. 介绍MSYS2 在windows下与使用
  11. 欧可林Oclean X Pro旗舰版:大学生的私人口腔医生
  12. 电子计算机奏出美妙的交响改为把字句,北师大版三年级下册语文的期中试卷
  13. 线性代数笔记【空间曲面】
  14. 破解TP-Link路由-嗅探PPPoE拨号密码
  15. numpy基础(1)
  16. 中国联通和中国电信措手不及,中国移动主动发起5G流量价格战
  17. 报错信息:java.io.FileNotFoundException拒绝访问
  18. skimage库的安装
  19. 企业微信接入自研小程序流程
  20. Linux 设备驱动程序(二)

热门文章

  1. 泰雷兹云安全报告显示,云端数据泄露和复杂程度呈上升趋势
  2. 计算机辅助工程分析及应用论文,计算机辅助工程设计毕业设计
  3. e820/efi 内存表
  4. AEJoy —— 如何使用 AE 中的表达式控件预设(三)
  5. Python学习:random模块下的choices()函数详解
  6. Mac安装redis详解(附图片)
  7. 如何排版 微信公众号「代码块」
  8. 读书笔记:《机器人SLAM导航核心技术与实战》目录
  9. 哈工大计算机科学与技术教学方案,计算机科学与技术学科硕士研究生培养方案-哈工大计算机学院...
  10. 关于《One day》