黑马JVM总结(十四)

2023-09-18 15:06:55

(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

更多推荐

计算机网络之物理层

目录一、物理层概述二、数据通信的基础知识2.1数据通信系统的模型2.2关于信道的几个基本概念2.3信道的极限容量三、物理层下面的传输媒体3.1导引型传输媒体3.2非导引型传输媒体四、信道复用技术五、数字传输系统六、宽带接入技术一、物理层概述物理层规程:用于物理层的协议。物理层的主要任务:确定与传输媒体的接口有关的一下特

【计算机网络】网络编程接口 Socket API 解读(7)

Socket是网络协议栈暴露给编程人员的API,相比复杂的计算机网络协议,API对关键操作和配置数据进行了抽象,简化了程序编程。本文讲述的socket内容源自Linuxman。本文主要对各API进行详细介绍,从而更好的理解socket编程。sendsend()遵循POSIX.1-2008MSG_CONFIRM是Linu

400电话-400电话申请-400电话办理开通服务中心

随着企业竞争的日益激烈,提供优质的客户服务成为企业成功的关键。而在客户服务中,电话联系是最常用的方式之一。为了满足企业的需求,400电话应运而生。本文将介绍400电话的申请、办理和开通服务中心,帮助企业了解如何获得高效的客户服务。首先,申请400电话是非常简单的。企业只需联系当地的电信运营商或400电话服务提供商,提供

短剧解说小程序搭建,短剧解说小程序源码

短剧解说小程序搭建,短剧解说小程序源码可定制开发小程序,H5,APP等系统有需要可定制可出源码,这个是啥你懂的(VVVVVVVVVVV):二五四九七八九零五九需要源码或搭建可看上面的数字信息短剧解说小程序搭建小程序使用uniapp开发服务端技术Java开发SpringBoot,mysql,redis,mybatis,T

MySQL与Oracle的分页

MySQL与Oracle的分页当我们通过SQL去查询一个结果集的时候,并不需要查看所有行,可能只是查看前几行,或者中间的几行。则需要像MySQL的limit或Oracle的ROWNUM与FETCHNEXT来实现。MySQL语法SELECT*FROMtable_nameLIMIT[offset,]row_count;LI

oracle中的minus数据比对

1、要有唯一索引或者主键作为前提,减少数据冲突的数量。2、当有in查询的时候,尽量用exists,这样能提高查询效率:createtableTF_F_USER_DIFF1tablespaceBD_TBS_EXP_DATAparallel20asselect/*+parallel(c,20)/*fromTF_F_USER

PostgreSQL 数据备份&恢复

文章目录PostgreSQL备份方式SQL备份(逻辑备份)文件系统备份(物理备份)归档备份(物理备份)逻辑备份&恢复物理备份&恢复(全量)备份恢复物理备份&恢复(某个时间点)场景具体操作PostgreSQL备份方式防止数据丢失的第一道防线就是备份。数据丢失有的是硬件损坏,还有人为的误删之类的,也有BUG的原因导致误删数

宝塔面板日志和缓存占用磁盘空间很大,如何清理?

服务器使用的宝塔面板,最近发现服务器的“系统盘”快爆满了,点面板上日志管理都要收费,我也不是很懂服务器的运维,使用ai进行询问,得到了解决:/var/log日志目录运行下面的命令查找是哪些目录占用空间很大du-h--max-depth=1我这边是/var/log和var/cache两个目录占用空间很大,进入/var/l

网络安全(黑客)自学

前言我是去年8月22日才正式学习网络安全的,因为在国营单位工作了4年,在广东一个月工资只有5000块,而且看不到任何晋升的希望,如果想要往上走,那背后就一定要有关系才行。而且国营单位的气氛是你干的多了,领导觉得你有野心,你干的不多,领导却觉得你这个人不错。我才24周岁,实在的受不了这种工作氛围,情绪已经压制了很多久,一

对象的创建过程

对象的创建过程基于两个方面回答这个问题:①jvm加载和分配内存。②java对象初始化。1.在实例化一个对象的时候,JVM首先会去检查目标对象是否已经被加载并初始化了。2.如果没有,JVM需要立刻去加载目标类,然后调用目标类的构造器完成初始化。①目标类的加载是通过类加载器来实现的,主要就是把一个类加载到内存里。②然后初始

PyQt学习笔记-使用QSettings保存系统配置参数

目录1.QSettings简介2.初始化QSettings及数据存储位置2.1使用系统api存储2.2存储成配置文件2.2.1使用文件格式设置2.2.2Format格式说明3Qsettings的使用3.1QSettings的数据保存和读取3.1.1使用setValue方法保存数据3.1.2使用value方法获取配置文件

热文推荐