黑马JVM总结(十四)

(1)分代回收_1

Java虚拟机都是结合前面几种算法,让他们协同工作,具体实现是虚拟机里面一个叫做分代的垃圾回收机制,把我们堆内存大的区域划分为两块新生代、老年代

新生代有划分为伊甸园、幸存区Form、幸存区To

为什么要这样区域划分呢?因为java中有的对象需要长时间使用,长时间使用的对象呢我就把放到老年代当中,哪些用完就可以丢弃的对象把它放在新生代当中,这样根据对象生命周期不同的特点进行不同的垃圾回收策略,老年代的垃圾回收很久才发生一次,新生代的垃圾回收发生比较频繁,不同的区域采用不同的算法就可以对垃圾回收,更有效的对垃圾回收进行管理

新生代的垃圾比如我们在楼下设置的垃圾场手机生活中的盒饭,手纸等等频繁的垃圾

老年代:比如每家每户用旧的椅子等等,当以后空间紧张屋子里放不下的时候,来清理这些旧用垃圾 ,执行的频率较低

(2)分代回收_2

当我们新创建对象时,新对象会采用伊甸园的空间

当伊甸园的空间逐渐放满时,在新建对象放不下时,就会触发一次垃圾回收,小的垃圾回收Minor GC ,Minor GC会采用前面讲的可达性分析算法沿着GC Roor引用链去找,看这些对象哪些有用那些可作为垃圾,进行标记  ,标记成功了采用复制算法,把存活的对象复制到幸存区To中

然后把幸存的对象进行加1,然后把伊甸园中没有的对象回收掉了

再交换幸存区Form和幸存区To的位置;

然后伊甸园就可以继续存放新产生的对象啦:

当存满后又一次触发Minor GC,此时去看伊甸园中存活的对象找到以外,把幸存区中有没有继续存活的对象,把伊甸园中的对象复制到TO中并且寿命加1,在看一下幸存区中存活的对象移入到TO中去寿命变为2,其余的垃圾对象回收掉

然后再交换幸存区的位置:

幸存区的对象不会一直在幸存区中待着,当寿命达到一个阈值,比如经过15次垃圾回收,这个对象价值比较高,那么没必要把它一直在幸存区留着,把它移到老年代中去

当出现新生代和老年代的对象都要放满时,此时会触发一次Full GC

当老年代空间不足先尝试回收新生代,当新生代内存不够尝试触发Full GC,触发一个老年代的垃圾回收,从新生到老年做一个整个的处理

老年代采用的算法可能是标记+清除(时间稍微慢)  可能是标记+整理算法(时间比较慢)

通过垃圾回收,如果老年代的空间还是不足,就会触发内存溢出异常

(3)分代回收_3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/111718.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

迅为RK3399开发板创建android工程

打开 AndroidStudio 软件,点击“Start a new Android Studio project”新建一个 Native C工程(因为我们要调用本地库,所以要创建这个 C实例工程),点击“Next” 2.填写创建信息,如下图所示。最后点击“finis…

计算机网络中的应用层和传输层(http/tcp)

目录 1、协议的通俗理解 1.1 理解协议 2.应用层 2.1 http协议 2.2 HTTP的方法 2.3 HTTP的状态码 2.4 HTTP常见Header 3、传输层 3.1 端口号 3.1.1 端口号范围划分 3.1.2 netstat 3.1.3 认识知名端口号(Well-Know Port Number) 3.2 UDP协议 3.2.1 UDP协议端格式 3…

本地Tomcat网页搭建结合Cpolar内网穿透实现公网访问

文章目录 1.前言2.本地Tomcat网页搭建2.1 Tomcat安装2.2 配置环境变量2.3 环境配置2.4 Tomcat运行测试2.5 Cpolar安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 Tomcat作为一个轻量级的服务器,不仅名字很有趣&#…

JDBC 学习笔记(基础)

示意图 目录 创建 JDBC 应用 例子:通过本地协议纯 Java 驱动程序实现JDBC 代码具体步骤: 1.注册驱动 2.建立与数据库的连接 3.获取执行SQL语句的对象 Statement 4.定义执行 SQL 语句 5.操作结果集对象 ResultSet 6.关闭操作对象及连接对象 JD…

82 # koa-bodyparser 中间件的使用以及实现

准备工作 安装依赖 npm init -y npm i koakoa 文档:https://koajs.cn/# koa 中不能用回调的方式来实现,因为 async 函数执行的时候不会等待回调完成 app.use(async (ctx, next) > {console.log(ctx.path, ctx.method);if (ctx.path "/login…

数据结构——四叉树

四叉树(Quadtree)是一种用于表示和管理二维空间的树状数据结构。它将二维空间递归地分割成四个象限,每个象限可以继续分割,以实现对空间的更精细的划分。四叉树通常用于解决空间搜索和查询问题,例如碰撞检测、图像压缩…

Java常用类之 Java比较器、System类、Math类、BigInteger与BigDecimal

Java常用类 文章目录 五、Java比较器5.1、Comparable 接口的使用5.1.1、自然排序:Comparable接口5.1.2、定制排序:Comparator接口 六、System类七、Math类八、BigInteger与BigDecimal 五、Java比较器 提出背景: Java中的对象,正常…

【群晖NAS】Synology drive套件安装设置与结合内网穿透实现远程访问——“cpolar内网穿透”

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 前言 群晖作为专业的数据存储中心&…

企业架构LNMP学习笔记59

目录介绍: bin:存放的是启动和关闭tomcat的脚本文件; conf:存放tomcat服务器的各种全局配置文件,其中最重要的是server.xml和web.xml lib: 存放的是tomcat服务器所需要的各种jar文件。java打包类库。 logs&#xff…

【Linux】编辑器 vim

1、vim的基本概念 vi/vim【一款文本编辑器】vim【一款多模式编辑器】vi/vim 的区别简单点来说,它们都是多模式编辑器,不同的是 vim 是 vi 的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮&#xff0…

ubuntu安装k8s(docker版)

(一)简介 k8s是什么就不介绍了,下面是k8s的官方文档,这里仅演示安装的过程,使用一主一从的结构 传送门 PS:推荐安装可以先使用云服务器把环境搭起来,这样系统比较干净,不然不知道会…

Java与MySQL的绝妙结合:打造高效审批流程

是流程思路等分析🐱‍👤 审批流程🐱‍💻 1️⃣.串行流程 当前节点审批完成后,下一次节点才能进行操作,例如经理通过之后,总监才能审批; 2️⃣.并行流程 一个审批节点需要多人联审。…