JVM面试题:(三)GC和垃圾回收算法

news2024/11/18 8:15:44

GC:

在这里插入图片描述

垃圾回收算法:

GC最基础的算法有三种: 标记 -清除算法、复制算法、标记-压缩算法,我们常用的垃圾回收器一般
都采用分代收集算法。

标记 -清除算法,“标记-清除”(Mark-Sweep)算法,如它的名字一样,算法分为“标记”和“清
除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。

复制算法,“复制”(Copying)的收集算法,它将可用内存按容量划分为大小相等的两块,每次
只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后
再把已使用过的内存空间一次清理掉。

标记-压缩算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行
清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存

分代收集算法,“分代收集”(Generational Collection)算法,把Java堆分为新生代和老年代,
这样就可以根据各个年代的特点采用最适当的收集算法。

分代回收:

在这里插入图片描述
对象优先分配在Eden区,如果Eden区没有足够的空间时,虚拟机执行一次Minor GC。
大对象直接进入老年代(大对象是指需要大量连续内存空间的对象)。这样做的目的是避免在

Eden区和两个Survivor区之间发生大量的内存拷贝(新生代采用复制算法收集内存)。
长期存活的对象进入老年代。虚拟机为每个对象定义了一个年龄计数器,如果对象经过了1次

Minor GC那么对象会进入Survivor区,之后每经过一次Minor GC那么对象的年龄加1,知道达
到阀值对象进入老年区。
动态判断对象的年龄。如果Survivor区中相同年龄的所有对象大小的总和大于Survivor空间的
一半,年龄大于或等于该年龄的对象可以直接进入老年代。
空间分配担保。每次进行Minor GC时,JVM会计算Survivor区移至老年区的对象的平均大小,
如果这个值大于老年区的剩余值大小则进行一次Full GC,如果小于检查

HandlePromotionFailure设置,如果true则只进行Monitor GC,如果false则进行Full GC。

垃圾回收器:

在这里插入图片描述
新生代的收集器包括Serial、PraNew、Parallel Scavenge,回收老年代的收集器包括Serial Old、Parallel Old、CMS,还有用于回收整个Java堆的G1收集器。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优化|一类二元二次规划的凸重构和外近似

论文解读者:范若岭 1. 文章优化问题: 对于下列问题,$ \mathbb{B} {0, 1}, \mathbb{R} 是实数集合。 是实数集合。 是实数集合。Q 是由实数组成的 是由实数组成的 是由实数组成的n \times n 对称矩阵。 对称矩阵。 对称矩阵。A 是由实数组成…

NSIDC定义的海冰相关概念

文章目录 相关概念Matlab绘图结果展示 相关概念 NSIDC 表示 “National Snow and Ice Data Center”,即美国国家雪和冰数据中心。NSIDC 是一个位于美国科罗拉多大学波尔得分校的研究中心,致力于收集、管理和分发全球雪和冰的科学数据。 Matlab绘图 cl…

智能井盖传感器:破解井盖安全隐患

万宾科技:智能井盖传感器 随着城市的不断发展,井盖成为城市道路的一部分,但也伴随着一些安全隐患。近年来,由于井盖倾斜或翻转导致的意外事件频发,引起了广泛关注。为了解决这一问题,万宾科技推出了智能井…

3、TCP状态

TCP状态 1、TCP通信时序 三次握手成功后,服务器和客户端进入了状态ESTABLISHED 当处于Time_WAIT状态后,不会马上变成CLOSE状态,会经历2MSL(约40秒),之后才会进入CLOSE状态。 总结: 主动发起…

主动配电网故障恢复的重构与孤岛划分matlab程序

微❤关注“电气仔推送”获得资料(专享优惠) 参考文档: A New Model for Resilient Distribution Systems by Microgrids Formation; 主动配电网故障恢复的重构与孤岛划分统一模型; 同时考虑孤岛与重构的配电网故障…

java 电动车销售管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java 电动车销售管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql…

深度学习_2_数据处理

import os是一个Python的内置模块,用于与操作系统进行交互。通过导入os模块,你可以使用其中提供的函数和方法来执行各种与操作系统相关的任务。 import osos.makedirs(os.path.join(.., date), exist_okTrue)##将创建一个名为date的文件夹,位…

基于全景运动感知的飞行视觉脑关节神经网络全方位碰撞检测

https:/doi.org/10.1155/2023/5784720 摘要: 生物系统有大量的视觉运动检测神经元,其中一些神经元可以优先对特定的视觉区域做出反应。然而,关于如何使用它们来开发用于全向碰撞检测的神经网络模型,很少有人做过工作。为此&#…

相同的 key, Nacos 配置一定会覆盖 application.yaml 吗?

一,背景: 之前在使用 Nacos 的时候有个疑问,同样的 key,在 Nacos 配置了,在 application 也配置了,到底会有哪个呢?一直没空查,后来在网上看到过文章,说 Nacos 是在 app…

【Redis】Hash 哈希相关的命令

命令 HSET 设置hash中指定的字段(field)的值(value)。 HSET key field value [field value ...]HGET 获取hash中指定字段的值。 HGET key fieldHEXISTS 判断hash中是否有指定的字段。 HEXISTS key fieldHDEL 删除hash中指定…

第十一章-用户进程

Ⅰ.为什么需要任务状态段TSS 1.LDT简介 已经不使用LDT加载任务了。因为当前运行的任务,其 LDT 位于 LDTR 指向的地址,这样 CPU 才能从中拿到任务运行所需要的资源(指令和数据)。因此,每切换一个任务时,需…

Android Jetpack Compose之生命周期与副作用

文章目录 1.概述2.Composeable生命周期3.Compose副作用及API3.1.Compose副作用API3.1.1 DisposableEffect3.1.2 SideEffect 3.2 Compose异步处理副作用API3.2.1 LaunchedEffect3.2.2 rememberCoroutineScope3.2.3 rememberUpdateState3.2.4 snapshotFlow 3.3 状态创建副作用API…

什么是C++?

1.什么是C C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的 程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机 界提出了OOP(object o…

一种管理KEIL工程输出文件的方法

开发语言:python; 针对工程:适配ARM公司的KEIL-V5软件的工程 管理的输出文件类型:BIN文件、HEX文件 脚本使用方法:直接放置到keil的设置项下; 脚本执行位置:程序编译之后 脚本功能&#xff1a…

C++智能指针(一)——shared_ptr初探

文章目录 1. 普通指针存在的问题2. Class shared_ptr2.1 使用 shared_ptr2.1.1 初始化 shared_ptr2.1.2 reset2.1.3 访问数据2.1.4 use_count() 3. Deleter3.1 定义一个 Deleter3.2 处理数组 1. 普通指针存在的问题 智能指针的引入,是为了解决普通指针在使用过程中…

Android 13.0 SystemUI修改状态栏电池图标样式为横屏显示

1.概述 在13.0的产品定制化开发中,对于原生系统中SystemUId 状态栏的电池图标是竖着显示的,一般手机的电池图标都是横屏显示的 可以觉得样式挺不错的,所以由于产品开发要求电池图标横着显示和手机的样式一样,所以就得重新更换SystemUI状态栏的电池样式了 如图: 2.SystemUI…

区块链金融的开发流程

区块链金融应用的开发流程与一般的软件开发流程有许多相似之处,但它还涉及到智能合约的编写、区块链网络集成和加密货币处理等特定方面的工作。以下是一般区块链金融应用的开发流程,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件…

如何查自己名下有多少个微信号?

99%的人都不知道微信有这个功能通过微信可以查自己名下绑定了多少个微信账号再也不担心身份证被别人用来绑定微信了姐妹们快去查一下吧! ①打开微信,点击【我】→点击【设置】 ②点击【通用】→ 点击【辅助功能】→ 点击【微信支付】 ③点击【帮助中心】…

MDK自动生成带校验带SVN版本号的升级文件

MDK自动生成带校验带SVN版本号的升级文件 获取SVN版本信息 确保SVN安装了命令行工具,默认安装时不会安装命令行工具 编写一个模板头文件 svn_version.temp.h, 版本号格式为 1_0_0_SVN版本号 #ifndef __SVN_VERSION_H #define __SVN_VERSION_H#define SVN_REVISIO…

性能分析工具的使用(超详细)

数据库服务器的优化步骤 整个流程划分成了观察(Show status)和行动(Action)两个部分。字母 S 的部分代表观察(会使用相应的分析工具),字母 A 代表的部分是行动(对应分析可以采取的行…