JVM面试真题总结(六)
文章收录在网站:http://hardyfish.top/
文章收录在网站:http://hardyfish.top/
文章收录在网站:http://hardyfish.top/
文章收录在网站:http://hardyfish.top/
解释GC的标记-整理算法及其优点
GC(垃圾收集)的标记整理算法是一种用于回收垃圾对象并释放内存空间的方法。
这个算法主要包含两个阶段:标记阶段和整理阶段。
标记阶段:
- 在这个阶段,垃圾收集器会遍历所有的对象,对于还在使用的对象进行标记。
- 在使用的定义可以是直接在使用,也可以是被其他在使用的对象引用。
整理阶段:
- 在标记阶段之后,垃圾收集器会进行整理,移动所有被标记为在使用的对象,使他们在内存中连续分布。
- 然后,它就可以一次性地回收所有未被标记的对象,也就是垃圾对象,从而释放大片连续的内存空间。
标记整理算法的一个主要优点是它可以有效地处理内存碎片问题
- 因为它会把所有在使用的对象整理到一起,释放出大片连续的内存空间。
不过,它的代价是需要移动对象,这会增加一定的开销。
在实际的应用场景中,标记-整理算法通常用于堆内存的垃圾回收
- 特别是处理老年代(
Old Generation
)的垃圾回收。
解释GC的标记-清除算法及其缺点
标记-清除(
Mark-Sweep
)是最早的垃圾收集算法之一其过程主要分为两个阶段:标记阶段和清除阶段。
标记阶段
- 这一阶段的任务是遍历所有的可达对象。
- 从一个固定的根对象(
root
)开始,递归地访问对象图。- 在访问到每一个可达对象时,都将其标记为可达。
- 在Java中,根对象通常包括全局变量和当前执行方法的局部变量。
清除阶段:
- 在标记阶段完成后,清除阶段开始。
- 在这个阶段,垃圾收集器会遍历堆内存,把未被标记(也就是不可达)的对象进行清除,回收其占用的内存。
标记-清除算法的优点是实现简单,且不需要移动存活对象。
但是,它有两个显著的缺点:
效率问题:
- 标记和清除两个过程的效率都不高。
空间问题:
- 标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配大对象时
- 无法找到足够的连续内存,从而提前触发另一次垃圾收集动作。
因此,现代的垃圾收集器通常不单独使用标记-清除算法,而是结合其他算法一起使用
- 如标记-整理算法或分代收集算法,以解决其带来的效率和空间问题。
解释GC的复制算法及其适用场景
复制算法是垃圾收集中的一种常见算法,它主要被用于新生代的垃圾回收。
- 复制算法的基本思想是将内存分为两个相等的区域(或者不等也可以,如新生代中的Eden和Survivor区)
- 每次只使用其中一个区域。
- 当这个区域用完时,就把还活着的对象复制到另一个区域,然后再把已使用过的区域清空。
具体来说,例如在Java的新生代中,内存被分为一个Eden区和两个
Survivor
区(分别记为S0和S1)。大部分情况下,新创建的对象会被分配在Eden区。
当Eden区满时,就会触发一次Minor GC,GC会检查Eden区中的所有对象
- 把还活着的对象复制到一个
Survivor
区(如S0),然后把Eden区完全清空。- 在下一次Minor GC时,会再次检查Eden区和S0区
- 把还活着的对象复制到另一个
Survivor
区(如S1),然后清空Eden区和S0区,以此类推。复制算法的主要优点是:
- 它可以快速地回收垃圾对象,因为只需要清空已使用过的区域就可以了
- 而且,由于活着的对象会被复制到另一个区域,因此这个过程也自然地完成了内存的整理,避免了内存碎片的产生。
然而,复制算法也有一些缺点:
- 首先,它需要两个区域来进行复制,这意味着在任何时候
- 都有一半的内存空间是闲置的,这在内存紧张的情况下可能是一种浪费
- 其次,如果有大量对象需要复制,那么复制过程可能会消耗一定的时间和CPU资源。
不过,对于新生代这样对象存活率较低的区域,复制算法通常是一种非常高效的垃圾收集方式。
解释GC的可达性分析算法及其优势
GC可达性分析算法是垃圾收集器用来判断哪些对象:
- 是活的(即仍然可能被程序使用)和哪些对象是死的(即不再被程序使用)的一种算法。
这个算法的基本思想是通过一系列的称为
GC Roots
的对象作为起始点从这些节点开始向下搜索,搜索所走过的路径称为引用链(
Reference Chain
)。
- 当一个对象到
GC Roots
没有任何引用链相连时,则证明此对象是不可用的。在Java语言中,可作为
GC Roots
的对象包括以下几种:
虚拟机栈(栈帧中的本地变量表)中引用的对象:
- 比如方法中创建的对象引用。
方法区中类静态属性引用的对象:
- 比如类中的静态变量。
方法区中常量引用的对象:
- 比如字符串常量池中的引用。
本地方法栈中JNI(即一般说的Native方法)引用的对象。
通过这种方式,GC可达性分析算法可以找出所有被程序还可能会使用的对象。
- 在标记阶段完成后,未被标记的对象将被视为不可达,之后在清除阶段被回收。
相关文章:

JVM面试真题总结(六)
文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 解释GC的标记-整理算法及其优点 GC(垃圾收集ÿ…...

C语言代码练习(第十八天)
今日练习: 48、猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时&…...

linux上使用rpm的方式安装mysql
1.从mysql官网上下载需要的版本,根据操作系统版本,CPU架构,下载让rpm bundle,这个版本是个完整版,包含其他所有版本 上传到服务器的一个目录,进行解压 执行tar -xvf mysql*.tar tar -xvf mysql*.tar 2.卸载老版本m…...

html 中如何使用 uniapp 的部分方法
示例代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><…...

Samtec连接器小课堂 | 连接器电镀常识QA
【摘要/前言】 像大多数电子元件一样,无数子元件和工艺的质量直接影响到成品的质量和性能。对于PCB级连接器,这些因素包括针脚材料、塑料类型、模制塑料体的质量、尾部的共面性、表面处理(电镀)的质量、选择正确的连接器电镀、制…...

大模型备案全网最详细流程解读(附附件+重点解读)
文章目录 一、语料安全评估 二、黑盒测试 三、模型安全措施评估 四、性能评估 五、性能评估 六、安全性评估 七、可解释性评估 八、法律和合规性评估 九、应急管理措施 十、材料准备 十一、【线下流程】大模型备案线下详细步骤说明 十二、【线上流程】算法备案填报…...

基于2143规则编码的uint8_t如何转换成float
2143格式存储的float类型数据在解码时,需要将1和2互换,3和4互换,然后 通过数组转float,进行转换 uint8_t data[] {0x72, 0x02, 0xc8, 0x42}; // 字节数组 float bytesToFloat(uint8_t data[]) { uint32_t x; memcpy(&x, da…...

[项目][WebServer][整体框架设计]详细讲解
目录 0.框架 && 前言1.TcpServer类1.功能2.类设计 2.HttpServer类1.功能2.类设计 3.Request类 && Response类1.功能2.Request类设计3.Response类设计 4.EndPoint类1.功能2.类设计 5.Task类1.功能2.类设计 6.ThreadPool类1.功能2.类设计 0.框架 && 前言…...

SprinBoot+Vue网上购物商城的设计与实现
目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…...

【数据结构】2——二叉树遍历
数据结构2——二叉树遍历 单纯记录 文章目录 数据结构2——二叉树遍历一、二叉树遍历1,先序遍历:根左右递归实现非递归实现(栈) 2.中序遍历:左根右递归非递归 3 .后序遍历:左右根递归非递归(两…...

数据结构应用实例(五)——关键路径
Content: 一、问题描述二、算法思想三、代码实现四、小结 一、问题描述 设计实现 AOE 网的关键活动与关键路径问题; 二、算法思想 获取拓扑序列;计算节点的最早开始时间 v e [ i ] ve[i] ve[i];计算节点的最晚开始时间 v l [ j ] vl[j] v…...

组播 2024 9 11
PIM(Protocol Independent Multicast)是一种常用的组播路由协议,其独立于底层的单播路由协议,能够在多种网络环境中有效地实现多播路由功能。PIM主要有两种模式:PIM Sparse Mode (PIM-SM) 和 PIM Dense Mode (PIM-DM)&…...

揭秘开发者的效率倍增器:编程工具的选择与应用
文章目录 每日一句正能量前言工具介绍功能特点:使用场景:提高工作效率的方式: 效率对比未来趋势后记 每日一句正能量 这推开心窗之人,可以是亲朋好友,也可以是陌客路人,可以是德高望重的哲人名流࿰…...

在AI的时代,程序员如何才不被淘汰
随着人工智能技术的迅猛发展,大模型(Large Language Models, LLMs)正逐渐成为IT行业的热点。对于程序员来说,转行大模型领域不仅意味着新的机遇,也面临着诸多挑战。本文将探讨程序员转行大模型的机遇与挑战,…...

tabBar设置底部菜单选项以及iconfont图标,setTabBar设置TabBar和下拉刷新API
tabBartabBar属性:设置底部 tab 的表现 首先在pages.json页面写一个tabBar对象,里面放入list对象数组,里面至少要有2个、最多5个 tab, 如果只有一个tab的话,H5(浏览器)依然可以显示底部有一个导航栏,如果没有,需要重启后才有,小程序则报错,只有2个以上才可以…...

2024C题prompt
题目 我正在进行数学建模,需要你为我提供帮助。下面我会将赛题背景和问题发送给你,请你为我提供比赛思路和指导。 以下是赛题背景和赛题说明,不是问题: 农作物的种植策略 根据乡村的实际情况,充分利用有限的耕地资源,…...

Numpy中数组的形状处理
目录 将多维数组降为一维数组竖直方向或水平方向数组的堆叠 数组形状处理的手段主要有reshape,resize,ravel,flatten,vstack,hstack,row_stack,column_stack,下面通过简单 的案例来解释这些方法…...

【动态规划】子序列问题二(数组中不连续的一段)
子序列问题二 1.最长定差子序列2.最长的斐波那契子序列的长度3.最长等差数列4.等差数列划分 II - 子序列 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃&am…...

可视耳勺方便吗?可视耳勺热销第一名品牌!
在生活中,耳部清洁是我们常常会关注却又容易忽视细节的一项日常护理。传统挖耳勺有着不可视的局限性,只能凭感觉和经验反复刮蹭耳朵,很容易将耳垢越捅越深,而且还会刮伤耳道。因此,可视耳勺应运而生,它通过…...

micropython 3-wire spi 9bit 写入的问题
网上猛找把,没有,找不到,mpy不愧是没朋友的缩写,没有咋办,自己造! 此库特别适用那些rgb屏的初始化,大多用3线spi,好家伙rgb用了十多个引脚现在想起来省引脚了是吧,就差这…...

导致JVM内存泄露的ThreadLocal详解
1. ThreadLocal介绍 1.1 什么是ThreadLocal Java官方文档中的描述:ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来…...

windows下关闭解除占用端口的进程
环境:windows 10 场景:启动某一应用程序时,提示其他应用已占用此端口,比如端口2425。 解决步骤: 1/3、打开windows的命令提示符,输入以下命令,查找占用此端口2425的PID号: # win…...

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取相机当前数据吞吐量(Python)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK里函数来获取相机当前数据吞吐量(Python) Baumer工业相机Baumer工业相机的数据吞吐量的技术背景CameraExplorer如何查看相机吞吐量信息在NEOAPI SDK里通过函数获取相机接口吞吐量 Baumer工业相机通过NEOAPI…...

版权与开源协议:一场创新与自由的边界之争
在数字时代的浪潮中,版权与开源协议作为知识产权领域的两大支柱,既相互依存又暗自较劲,共同绘制着科技创新的宏伟蓝图。本文将带您深入这场创新与自由的边界之争,探讨版权与开源协议之间的微妙关系,以及它们如何共同推…...

学生用的蓝牙耳机推荐有哪些?实测四款实力出众机型!
在当今数字化学习环境中,学生对蓝牙耳机的需求日益增长,无论是在线课程的学习、图书馆的集中阅读还是日常通勤中的音频资料复习,一款性能优异、舒适度高且价格合理的蓝牙耳机对学生来说至关重要,面对市场上琳琅满目的产品选择&…...

MIT6.824 课程-GFS
GFS 原文:https://zhuanlan.zhihu.com/p/113161014 搬运用于参考学习 概述 存储(Storage)是一个非常关键的抽象,用途广泛。 GFS 论文还提到了很多关于容错、备份和一致性的问题。 GFS 本身是 Google 内部一个很成功的实用系统&…...

力扣第200题 岛屿数量
前言 记录一下刷题历程 力扣第200题 岛屿数量 岛屿数量 原题目: 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平…...

协议头,wireshark,http
目录 协议头 ip头 udp头 mac层 网络工具 telnet wireshark Http 一、HTTP 协议介绍 二、HTTP 协议的工作过程 三、使用抓包工具抓取报文 四、获取到http请求报文: 五、http请求(request) (一)、认识URL 项…...

vscode ssh离线远程连接ubuntu调试
遇见问题: 1 ssh连接上无法启动服务器的虚拟环境; 2 ssh连接上启动服务器的虚拟环境后无法打断点; 对于问题需要参考下面连接安装python和debugy的插件拓展,并且配置json文件link。VSCode - 离线安装扩展python插件教程_vscode…...

Jenkins 通过 Version Number Plugin 自动生成和管理构建的版本号
步骤 1:安装 Version Number Plugin 登录 Jenkins 的管理界面。进入 “Manage Jenkins” -> “Manage Plugins”。在 “Available” 选项卡中搜索 “Version Number Plugin”。选中并安装插件,完成后可能需要重启 Jenkins。 步骤 2:配置…...