Java的垃圾回收机制、年轻代与老年代
目录
- 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的垃圾回收机制、年轻代与老年代相关推荐
- jvm对象从新生代到老年代_JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代...
内存模型 JVM运行时数据区由程序计数器.堆.虚拟机栈.本地方法栈.方法区部分组成,结构图如下所示. JVM内存结构由程序计数器.堆.栈.本地方法栈.方法区等部分组成,结构图如下所示: 1)程序计数器 ...
- Java GC垃圾回收机制
Java提供了gc机制,jvm 中,程序计数器.虚拟机栈.本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理,因此,我们的内存垃圾回收主要集中于 jav ...
- JAVA虚拟机垃圾回收机制和JAVA排错三剑客
一.Java虚拟机逻辑回收机制 1.Java垃圾回收器 Java垃圾回收器是Java虚拟机(JVM)的三个重要模块(另外两个是解释器和多线程机制)之一,为应用程序提供内存的自动分配(Memory Al ...
- Java的垃圾回收机制详解——从入门到出土,学不会接着来砍我!
文章目录 哪些内存需要回收 回收堆:垃圾的定义 引用计数算法: 可达性分析算法: GC Roots的对象 回收方法区:垃圾的定义 如何回收垃圾 垃圾回收算法总结 标记-清除算法(适用老年代,但是基本废 ...
- 【Java】Java的垃圾回收机制小结
文章目录 1. Java的垃圾回收机制? 1.1 Java的引用类型 1.2 哪些内存需要回收? 1.3 怎么定义垃圾? 1.4 怎么回收垃圾? 2. JVM一次完整的GC流程? 3.触发GC之后,会 ...
- java的垃圾回收机制包括:主流回收算法和收集器(jvm的一个主要优化方向)
2019独角兽企业重金招聘Python工程师标准>>> java的垃圾回收机制是java语言的一大特色,解放了开发人员对内存的复杂控制,但如果你想要一个高级java开发人员,还是需要 ...
- [Java基础] 垃圾回收机制
写在前面 本文简单介绍一下Java的垃圾回收机制相关概念. 活动地址:CSDN21天学习挑战赛 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩:迟一天就多一天平庸的困扰.各位小伙伴,如果您 ...
- Java的垃圾回收机制介绍
1.java的语言框架 (1)CPU->操作系统内核->应用层框架->JVM(java虚拟机)->Java字节码->Java源代码 (2)java是解释型语言,嵌入式常用 ...
- Java --- JVM年轻代与老年代
一.年轻代与老年代 1.存储在VM中的Java对象可以被划分为两类:①.一类是生命周期较短的瞬时对象,这类对象的创建和消亡都非常迅速.②.另外一类对象的生命周期却非常长,在某些极端的情况下还能够与VM ...
最新文章
- py-faster-rcnn + ZF 实现自己的数据训练与检测(一)
- php 目录管理,[PHP文件管理器]①--遍历目录
- OMNeT++学习程序 4
- 纳德拉:微软正计划“终极移动设备”
- ksu7对讲机调频软件_建伍TK3107对讲机调频及软件处理设置
- Mysql区分大小写问题
- 「微服务」修改服务注册到nacos默认的命名空间和分组名称
- Redis Cluster集群(Linux设计搭建)
- mysql的封锁协议_【眼见为实】数据库并发问题 封锁协议 隔离级别
- 介绍MSYS2 在windows下与使用
- 欧可林Oclean X Pro旗舰版:大学生的私人口腔医生
- 电子计算机奏出美妙的交响改为把字句,北师大版三年级下册语文的期中试卷
- 线性代数笔记【空间曲面】
- 破解TP-Link路由-嗅探PPPoE拨号密码
- numpy基础(1)
- 中国联通和中国电信措手不及,中国移动主动发起5G流量价格战
- 报错信息:java.io.FileNotFoundException拒绝访问
- skimage库的安装
- 企业微信接入自研小程序流程
- Linux 设备驱动程序(二)