联通面试题
一、GC
1.1、目标
GC的主要作用是自动识别和释放不再使用的对象,回收其所占用的内存,以防止内存泄漏和内存溢出的问题。
1.2、如何实现
1.2.1、标记阶段
GC从根对象(如线程栈中的引用、静态变量等)开始,通过可达性分析算法标记所有与根对象直接或间接关联的对象。
标记技术法
可达性分析法
1.2.2、清除阶段:
GC遍历堆中的所有对象,清除未被标记的对象,以释放其占用的内存。
1.2.3、压缩阶段(可选):
GC可以选择对堆进行压缩操作,将存活对象紧凑排列,以减少内存碎片和提高内存利用率。
1.3、GC的优点包括:
1.3.1、自动内存管理:
GC可以自动识别和回收不再使用的对象,减轻了程序员手动释放内存的负担。
1.3.2、避免内存泄漏:
GC可以自动回收无法通过程序访问到的对象,避免了因为忘记释放内存而导致的内存泄漏问题。
1.3.3、避免内存溢出:
GC可以动态地管理内存,及时回收不再使用的对象,避免了因为内存不足而导致的内存溢出问题。
1.4、GC的缺点包括:
1.4.1、垃圾回收的开销
GC需要消耗一定的CPU和内存资源来执行垃圾回收操作,可能会对程序的性能造成一定的影响。
1.4.2、程序暂停时间
在执行GC时,所有的线程都会被暂停,直到GC完成。这会导致程序在执行GC时出现明显的停顿,对于实时性要求较高的应用可能会有影响。
为了更好地利用GC,可以采取以下措施:
1、优化对象的生命周期,尽量减少对象的创建和销毁,避免频繁的GC操作。
2、合理设置堆大小和GC参数,根据应用的实际情况进行调优。
3、避免创建过多的临时对象,可以使用对象池或复用对象的方式来减少GC的开销。
总之,GC是Java的一项重要特性,有效的GC策略可以提高程序的性能和稳定性,但需要根据具体应用的需求和场景来进行调整和优化。
二、CMS
是一种用于Java的垃圾回收器,它被设计用来减少垃圾回收的停顿时间,尤其适用于对响应时间要求较高的应用。

2.1、工作原理
1、初始标记阶段(Initial Mark):暂停所有应用线程,标记所有与根对象直接关联的对象。
2、并发标记阶段(Concurrent Mark):与应用线程并发执行,标记所有与根对象间接关联的对象。
3、并发预清理阶段(Concurrent Pre-clean):与应用线程并发执行,处理一些在并发标记期间发生变动的对象。
4、最终标记阶段(Final Remark):暂停所有应用线程,完成标记过程,确保标记的准确性。
5、并发清除阶段(Concurrent Sweep):与应用线程并发执行,对未被标记的对象进行清除回收。
2.2、优点
1、低暂停时间:CMS通过将垃圾回收的过程与应用线程并发执行,减少了垃圾回收的暂停时间,从而降低了对应用响应时间的影响。
2、分阶段执行:CMS将垃圾回收分为多个阶段,并与应用线程并发执行,减少了对应用的影响。
2.3、缺点
1、不压缩内存:CMS不会对堆进行整理压缩操作,从而避免了长时间的停顿,但可能导致堆内存碎片增多。
2、需要更多的CPU资源:由于并发执行的关系,CMS需要更多的CPU资源来执行垃圾回收操作。
需要注意的是,CMS并不是适用于所有场景的垃圾回收器。由于并发执行的特性,CMS可能导致堆内存的碎片化增多,并且因为并发执行的开销,可能会对应用的吞吐量产生一定的影响。因此,在选择GC策略时,需要根据应用的实际情况进行评估和选择。
三、G1
G1(Garbage-First)是一种新的垃圾回收器,引入了全新的垃圾回收算法和内存布局方式。相比于CMS和其他传统的垃圾回收器,G1在处理大堆、低延迟和高吞吐量场景下具有更好的性能表现
3.1、工作原理
1、分区布局:G1将堆划分为多个大小相等的分区(Region),每个分区可以是Eden区、Survivor区或者Old区。这种分区布局可以提供更细粒度的内存管理。
2、并发标记:G1使用并发标记算法来进行标记阶段,与应用线程并发执行,以减少垃圾回收的停顿时间。
3、并发清理:G1使用并发清理算法来进行分区的清理,与应用线程并发执行,以减少垃圾回收的停顿时间。
4、混合回收:G1采用了混合回收的方式,在标记和清理阶段之间可以执行一部分回收操作,以进一步减少垃圾回收的停顿时间。
5、优先处理垃圾多的分区:G1的名字“Garbage-First”就是因为其优先处理垃圾多的分区。G1会根据分区内垃圾的多少来优先选择最需要回收的分区,以达到更高的吞吐量。
3.2、优点
1、可预测的停顿时间:G1通过控制每次垃圾回收的停顿时间,可以提供可预测的垃圾回收性能,尤其适用于对低延迟有要求的应用。
2、高吞吐量:G1采用并行和并发的方式执行垃圾回收,可以在保证低延迟的同时,提供较高的吞吐量,适合处理大堆的应用场景。
3、内存整理:G1在回收过程中可以进行部分的内存整理,减少内存碎片,提高内存利用率。
4、可预测的逐步增量:G1通过划分多个分区,并以逐步增量的方式执行垃圾回收,可以更好地控制回收的进度。
需要注意的是,G1并不是适用于所有场景的垃圾回收器。在一些极端情况下,如大量短期存活的对象或大量大对象的情况下,G1的性能可能不如其他垃圾回收器。因此,在选择GC策略时,需要根据应用的实际情况进行评估和选择。
四、CMS和G1的对比
1、垃圾回收方式:CMS采用并发标记和并发清除的方式来进行垃圾回收,即在应用线程并发执行的同时,进行标记和清除操作。而G1采用分代混合收集的方式,将堆划分为多个分区,并在标记和清理之间执行一部分回收操作。
2、堆布局:CMS并不对堆进行特殊的布局,而G1采用了分区布局,将堆划分为多个大小相等的分区。
3、停顿时间:CMS的目标是减少垃圾回收的停顿时间,特别适用于低延迟要求较高的应用。它通过并发执行的方式尽量减少对应用线程的影响。而G1也注重减少垃圾回收的停顿时间,但它通过可预测的停顿时间来提供更好的性能,尤其适用于对停顿时间有严格要求的应用。
4、内存整理:CMS在回收过程中不会对内存进行压缩整理,可能会导致堆内存碎片增多。而G1可以在回收过程中进行部分的内存整理,减少内存碎片,提高内存利用率。
5、吞吐量:CMS主要关注降低停顿时间,但可能会对应用的吞吐量产生一定的影响。而G1在保证低延迟的同时,也提供了较高的吞吐量,适用于需要处理大堆的应用场景。
综上所述,CMS适用于对低延迟有要求的场景,重点在于减少停顿时间。而G1适用于对停顿时间和吞吐量都有较高要求的场景,通过分区布局和可预测的停顿时间提供更好的性能。在实际选择时,需要根据应用的实际情况和具体需求来进行评估和选择。
相关文章:
联通面试题
一、GC 1.1、目标 GC的主要作用是自动识别和释放不再使用的对象,回收其所占用的内存,以防止内存泄漏和内存溢出的问题。 1.2、如何实现 1.2.1、标记阶段 GC从根对象(如线程栈中的引用、静态变量等)开始,通过可达性…...
[计组03]进程详解2
目录 应用程序 系统调用 驱动 软件 再看进程 进程管理 如何管理 ? 创建一个进程 注意 PCB 文件描述表 进程相关重点 为什么有进程调度 虚拟空间地址 这次我们从更加详细全面的角度看一下进程在计算机中体系中的展现 应用程序 应用程序 调动 系…...
使用redis+lua通过原子减解决超卖问题【示例】
系列文章目录 一、SpringBoot连接MySQL数据库实例【tk.mybatis连接mysql数据库】 二、SpringBoot连接Redis与Redisson【代码】 三、SpringBoot整合WebSocket【代码】 四、使用redislua通过原子减解决超卖问题【示例】 五、SpringBoot整合Elasticsearch【代码示例】 文章目录 系…...
WebFlux异常处理:onErrorReturn和onErrorResume
1 缘起 最近在学习WebFlux, 处理异常时遇到些问题,比如,Java直接抛出的异常无法直接被onErrorReturn和onErrorResume捕获, 但是,在map或者flatMap等方法之后的异常又可以直接被捕获, 于是,进行…...
《动手学深度学习 Pytorch版》 4.5 权重衰减
4.5.1 范数与权重衰减 整节理论,详见书本。 4.5.2 高维线性回归 %matplotlib inline import torch from torch import nn from d2l import torch as d2l# 生成一些数据,为了使过拟合效果更明显,将维数增加到 200 并使用一个只包含 20 个样…...
数据脱敏的风险量化评估介绍
1、背景介绍 当前社会信息化高速发展,网络信息共享加速互通,数据呈现出规模大、流传快、类型多以及价值密度低的特点。人们可以很容易地对各类数据实现采集、发布、存储与分析,然而一旦带有敏感信息的数据被攻击者获取将会造成个人隐私的严重…...
SpringCloudGateway网关实战(三)
SpringCloudGateway网关实战(三) 上一章节我们讲了gateway的内置过滤器Filter,本章节我们来讲讲全局过滤器。 自带全局过滤器 在实现自定义全局过滤器前, spring-cloud-starter-gateway依赖本身就自带一些全局过滤器࿰…...
08在MyBatis-Plus中配置多数据源
配置多数据源 模拟多库场景 适用于多种场景: 多库(操作的表分布在不同数据库当中),读写分离(有的数据库负责查询的功能,有的数据库负责增删该的功能),一主多从,混合模式等 第一步: 模拟多库,在mybatis_plus数据库中创建user表,在mybatis_plus_1数据库中创建product表 --创建…...
Centos8安装docker并配置Kali Linux图形化界面
鉴于目前网上没有完整的好用的docker安装kali桌面连接的教程,所以我想做一个。 准备工作 麻了,这服务器供应商提供的镜像是真的纯净,纯净到啥都没有。 问题一:Centos8源有问题 Error: Failed to download metadata for repo ap…...
游戏开发初等数学基础
凑数图() 立体图形面积体积 1. 立方体(Cube): 表面积公式: 6 a 2 6a^2 6a2 (其中 a a a 是边长)。体积公式: a 3 a^3 a3 (其中 a a a 是边长)。 2. 球体(Sphere): 表面积公…...
svg图片代码data:image/svg+xml转png图片方法
把代码保存为html格式的文件中,用浏览器访问,即可右键保存 从AI软件或其它网站得到svg图片代码后,把他复制到下面源码上 注意:src""图片地址中,一些参数的含义 d‘这里是图片代码数据’ viewBox是图片显示区域,宽,高等 fill%23000000’这里表示颜色 ,后面6位0表示黑色…...
解决问题:Replace `‘vue‘;⏎` with `“vue“;`
使用vscode写vue文件的问题: Replace vue;⏎ with "vue"; error Replace v-model:value"xxx"placeholder"inputsearch prettier/prettier 7:38 error Insert ⏎ potentially fixable with the --fix option 原因:格式问题&a…...
ThinkPHP 5.0通过composer升级到5.1,超级简单
事情是这样的,我实现一个验证码登录的功能,但是这个验证码的包提示tp5的版本可以是5.1.1、5.1.2、5.1.3。但我使用的是5.0,既然这样,那就升个级呗,百度了一下,结果发现大部分都是讲先备份application和修改…...
计算机竞赛 多目标跟踪算法 实时检测 - opencv 深度学习 机器视觉
文章目录 0 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习多目标跟踪 …...
一文了解大模型工作原理——以ChatGPT为例
文章目录 写在前面1.Tansformer架构模型2.ChatGPT原理3.提示学习与大模型能力的涌现3.1 提示学习3.2 上下文学习3.3 思维链 4.行业参考建议4.1 拥抱变化4.2 定位清晰4.3 合规可控4.4 经验沉淀 写在前面 2022年11月30日,ChatGPT模型问世后,立刻在全球范围…...
CPP-Templates-2nd--第十九章 萃取的实现 19.7---
目录 19.7 其它的萃取技术 19.7.1 If-Then-Else 19.7.2 探测不抛出异常的操作 19.7.3 萃取的便捷性(Traits Convenience) 别名模板和萃取(Alias Templates And Traits) 变量模板和萃取(Variable Templates and Traits&…...
python 采用selenium+cookies 获取登录后的网页
百度网页由于需要登陆手机短信验证。比较麻烦 这里我采用先人工登录百度账号,然后将百度账号的相关cookies保存下来 然后采用selenium动态登录网页 整体代码如下 from selenium import webdriverimport timeoptions webdriver.ChromeOptions()options.add_argu…...
【测试开发】答疑篇 · 什么是软件测试
【测试开发】答疑篇 文章目录 【测试开发】答疑篇1. 生活中的测试2. 什么是软件测试3. 为什么要有测试/没有测试行不行4. 软件测试和软件开发的区别5. 软件测试和软件调试之间的区别6. 软件测试的岗位7. 优秀测试人员具备的素质 【测试开发】答疑篇 软件不一定是桌面应用&#…...
深入解析顺序表:揭开数据结构的奥秘,掌握顺序表的精髓
💓 博客主页:江池俊的博客⏩ 收录专栏:数据结构探索👉专栏推荐:✅C语言初阶之路 ✅C语言进阶之路💻代码仓库:江池俊的代码仓库🔥编译环境:Visual Studio 2022Ἰ…...
数据风险量化评估方案
一、企业面临数据安全的痛点 1、企业缺少清晰的数据安全意识 各部门重视度不够,缺少主动数据安全管控意识。数据安全管控架构不清晰,职责划分不明确。对数据安全管控认识不全面、不深刻。工作人员对于所持有的数据缺乏概念,导致数据的价值无…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
