Java虚拟机 垃圾收集器与内存分配策略
说起GC,我们要思考的主要有三件事
哪些内存需要回收
那些已经“死去”的对象,那么哪些对象“死”,哪些对象“活”呢,有个简单的办法
引用计数法,但是没法解决循环依赖问题
所以Java虚拟机采用的是可达性分析算法
这个算法通过一系列称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,如果对象无法被搜到,那么这些对象会被标记为要清除的对象。
那么“GC Roots”又是什么?“GC Roots”主要有以下几种
活跃栈帧中的指向GC堆的引用,就是方法运行时的临时变量,引用参数
被加载的Java类
Java类中的引用类型静态变量
等等
什么时候回收
谈什么时候回收还得从minor gc和major gc(full gc)讲起,minor gc指新生代回收,major gc指老年代回收
先来讲新生代回收的原因,新生代内存区域分为eden区和两个survivor区(hotspot默认为eden:survivor=8:1)当eden要满了了,就进行一次minor gc
再来讲讲老年代回收的原因,新生代升到老年代的区域满了,就会发生major gc
那么如果gc后还是满了呢?那就OutOfMemoryError
如何回收
对于新生代和老年代有不同的回收策略
新生代:新生代对象来的快去的也快,所以采用“标记复制算法”,eden区存活内容复制到survivor1区,然后清空eden区,然后当survivor1区要清理就升入survivor2区,最后升入老年代
老年代:老年代对象存活时间长,所以采用“标记清除算法”。
Java虚拟机 垃圾收集器与内存分配策略的更多相关文章
- Java虚拟机垃圾收集器与内存分配策略
Java虚拟机垃圾收集器与内存分配策略 概述 那些内存须要回收,什么时候回收.怎样回收是GC须要完毕的3件事情. 程序计数器.虚拟机栈与本地方法栈这三个区域都是线程私有的,内存的分配与回收都具有确定性 ...
- 深入理解java虚拟机----->垃圾收集器与内存分配策略(下)
1. 前言 内存分配与回收策略 JVM堆的结构分析(新生代.老年代.永久代) 对象优先在Eden分配 大对象直接进入老年代 长期存活的对象将进入老年代 动态对象年龄判定 空间分配担保 2. 垃圾 ...
- 深入理解JAVA虚拟机 垃圾收集器和内存分配策略
引用计数算法 很多教科书判断对象是否存活的算法是这样的:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器都为0的对象就是不可能再被使用的 ...
- [深入理解Java虚拟机]<垃圾收集器与内存分配策略>
Overview 垃圾收集考虑三件事: 哪些内存需要回收? 什么时候回收? 如何回收? 重点考虑Java堆中动态分配和回收的内存. Is Object alive? 引用计数法 给对象添加一个引用计数 ...
- Java虚拟机--垃圾收集器和内存分配
垃圾收集器和内存分配 程序计数器.虚拟机栈.本地方法栈这三个区域和线程的生命周期一致,所以方法结束或者线程结束时,内存自然就跟着回收了.Java堆和方法区,只有在程序处于运行期间才能知道会创建哪些对象 ...
- java虚拟机学习-JVM内存管理:深入垃圾收集器与内存分配策略(4)
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 概述: 说起垃圾收集(Garbage Collection,下文简称GC),大部分人都把这项 ...
- 深入理解java虚拟机_第三章(上)----->垃圾收集器与内存分配策略
1. 前言 这一版块内容比较多,分为两篇文章来做笔记.本文讲述上半部分垃圾收集部分;下一篇文章写内存分配部分. 概述 对象已死吗? 引用技术算法 可达性分析算法 再谈引用 两次标记 回收方法区 2. ...
- 《深入java虚拟机》读书笔记之垃圾收集器与内存分配策略
前言 该读书笔记用于记录在学习<深入理解Java虚拟机--JVM高级特性与最佳实践>一书中的一些重要知识点,对其中的部分内容进行归纳,或者是对其中不明白的地方做一些注释.主要是方便之后进行 ...
- 《深入理解Java虚拟机》(三)垃圾收集器与内存分配策略
垃圾收集器与内存分配策略 详解 3.1 概述 本文参考的是周志明的 <深入理解Java虚拟机>第三章 ,为了整理思路,简单记录一下,方便后期查阅. 3.2 对象已死吗 在垃圾收集器进行回收 ...
随机推荐
- xshell连接linux主机时,出现错误:Could not connect to '***.***.***.***' (port 22)
xshell连接linux主机时,会出现错误:Could not connect to '192.168.89.144' (port 22): Connection failed. 但是这时能ping ...
- 【SpringBoot】Logback日志框架介绍和SpringBoot整合实战
========================11.Logback日志框架介绍和SpringBoot整合实战 2节课================================ 1.新日志框架L ...
- PythonStudy——列表与字典推导式 List and dictionary derivation
# 快速生成列表或字典的语法糖,且能在生成过程中添加简单的逻辑 # 能被列表推导式推导的数据源必须在循环取值时可以得到一个值 ls = [v for v in range(1, 6)] print(l ...
- Docker之 默认桥接网络与自定义桥接网卡
docker引擎会默认创建一个docker0网桥,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和宿主机都放到同一个二层网络. 1. docker如何使用网桥 1.1 Linux虚拟网桥的特点 ...
- Java Web参考资料
Maven Maven学习 Eclipse 使用Maven 构建Web项目的最佳方式:总的来说就是先要修改项目的Project facets来更改Java版本.Servlet版本. 错误Cannot ...
- makefile或shell中的一些变量
总是记不住,作个笔记 $@ 所有目标文件 $< 第一个依赖文件的名称 $? 所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚 $^ 所有的依赖文件,以空格分开,不包含重复的依 ...
- java中拼接两个对象集合
目标: 根据两个list中每条记录的某个属性是否相同来拼接. 1.首先定义一个字符串 String str = "[{\"ITEMID\":2,\"ITEMN ...
- SQL 中 CASE - WHEN - THEN - ELSE - END 的小结
在SQLServer中给变量赋备件值 可以用 @var = CASE WHEN EXPRESSION THEN STATEMENT01 ELSE STATEMENT02 END 当表达式 EXPRES ...
- Xtrabackup2.4.8备份、还原、恢复Mysql5.7.19实操(网络拷贝)
环境:CentOS 6.7 + Mysql 5.7.19 + Xtraback 2.4.8 innobackupex常用参数: --user=USER 指定备份用户,不指定的话为当前系统用户 --p ...
- 内训--PPT演示技巧
企业内训,实操,不涉及如何做PPT,仅讲解PPT播放等内容.做好PPT后,在演讲的过程中,如何使用这些功能.