JVM面试真题总结(七)
文章收录在网站:http://hardyfish.top/
文章收录在网站:http://hardyfish.top/
文章收录在网站:http://hardyfish.top/
文章收录在网站:http://hardyfish.top/
解释GC的引用计数算法及其局限性
引用计数算法是一种非常直观、简单的垃圾收集算法。
它的基本思想是:
- 对于一个对象,如果没有其他对象引用它,那么这个对象就是不再使用的
- 因此就可以被当作垃圾收集掉。
具体来说,引用计数算法为每个对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1
当引用失效时,计数器值就减1。
- 任何时候,只要对象的引用计数器为0,那么这个对象就是不再使用的,可以被回收。
引用计数算法的主要优点是:
- 它的实现简单,而且垃圾对象可以在它成为垃圾的那一刻就被立即回收,这使得程序的内存使用更加及时和高效。
然而,引用计数算法也有一些重要的缺点:
无法处理循环引用
- 如果两个对象互相引用,但没有其他对象引用它们,那么这两个对象实际上是垃圾
- 但它们的引用计数都不为0,因此无法被回收。
计数器的维护开销大:
- 每次引用关系改变时,都需要更新计数器,这会消耗一定的计算资源。
无法进行有效的内存整理:
- 引用计数算法只是简单地回收垃圾对象,而不能像其他GC算法那样
- 通过移动对象来整理内存,避免内存碎片的产生。
列举并解释常见的垃圾收集算法
垃圾收集(
Garbage Collection,GC
)是自动内存管理的重要部分常用的垃圾回收算法主要有以下几种:
标记-清除(Mark-Sweep)算法:
- 这是最基础的垃圾收集算法。
- 它分为标记和清除两个阶段,首先标记出所有需要回收的对象,然后清除被标记的对象。
- 这种算法的主要缺点是清除后会产生大量不连续的内存碎片。
复制(Copying)算法:
- 这种算法将可用内存分为两个相等的区域,每次只使用其中一个区域。
- 垃圾收集时,会遍历当前使用区域中的所有对象,把还活着的对象复制到另一个区域中,然后把当前使用区域整个清空。
- 这种算法的优点是没有内存碎片,缺点是需要两倍内存空间。
标记-整理(Mark-Compact)算法:
- 这种算法是标记-清除算法的改进版,增加了整理的过程。
- 在标记和清除之后,会把所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。
- 这种算法避免了内存碎片,但移动对象的成本比较高。
分代(Generational)收集算法:
- 这种算法基于这样一个观察:大部分对象都是生命周期短的,少部分对象的生命周期长。
- 所以,内存被分为两部分,一部分为新生代,一部分为老年代。
- 新对象首先在新生代中分配,新生代满了之后进行一次垃圾收集。
- 存活的对象会被复制到老年代中,老年代满了之后,再对老年代进行垃圾收集。
在ZGC和G1之间应如何做出选择?
ZGC和G1都是高级的垃圾收集器,为了满足大内存和低延迟的需求而设计。
但它们的设计理念和实现方式有所不同,因此在选择时,需要考虑以下几个方面:
延迟
- 如果你的应用对延迟非常敏感,那么ZGC可能是更好的选择。
- ZGC的设计目标是将所有的GC停顿时间控制在10毫秒以内,而且这个时间不会随着堆大小的增加而增加。
内存大小:
- 如果你的应用需要处理大量的数据,或者你的系统有大量的可用内存,那么ZGC可能是更好的选择。
- ZGC可以处理多达4TB的堆内存。
CPU资源:
- ZGC为了实现低延迟和高吞吐量,会使用更多的CPU资源。
- 如果你的系统CPU资源有限,那么G1可能是更好的选择。
平台支持:
- 目前,ZGC只在
Linux/x64
平台上可用,并且需要启用JVM的实验性功能。- 如果你的环境不满足这些要求,那么你只能选择G1或其他垃圾收集器。
长期支持:
- G1从JDK 9开始已经成为默认的垃圾收集器,而ZGC仍然是一个实验性的特性。
- 如果你需要长期的稳定性和支持,那么G1可能是更好的选择。
G1垃圾收集器的优缺点分别是什么?
G1(Garbage-First
)垃圾收集器是一种面向服务器的垃圾收集器它具有以下优点和缺点:
优点:
可预测的停顿时间:
- 这是G1最主要的优点,也是它的设计目标之一。
- G1收集器允许用户指定期望的停顿时间目标,G1会尽可能地在这个时间范围内完成垃圾收集。
高吞吐量:
- G1能充分利用多CPU、多核硬件的优势,提高垃圾收集的吞吐量。
避免内存碎片:
- G1通过将堆划分为许多小的区域,并优先回收垃圾最多的区域,从而有效地减少了内存碎片。
大内存处理能力:
- G1可以处理堆大小从几百MB到多达4TB的应用。
缺点:
CPU资源占用:
- G1在进行并发阶段时,会占用一部分CPU资源
- 对于CPU资源紧张的系统,这可能会对应用程序的性能产生影响。
需要更多的内存开销:
- 由于G1将堆划分为许多小的区域
- 这会导致相比其他垃圾收集器,G1需要更多的内存开销。
在某些情况下,G1可能无法达到预设的停顿时间目标。
例如,如果堆中的存活对象非常多,或者垃圾收集线程的数量设置得过少
- 都可能使得G1无法在预设的时间内完成垃圾收集。
相关文章:

JVM面试真题总结(七)
文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 解释GC的引用计数算法及其局限性 引用计数算法是一种非常直观、简…...

深入理解CASAtomic原子操作类详解
1.CAS介绍 什么是 CAS CAS(Compare And Swap,比较与交换),是非阻塞同步的实现原理,它是CPU硬件层面的一种指令,从CPU层面能保证"比较与交换"两个操作的原子性。CAS指令操作包括三个参数&#x…...

C51单片机-单按键输入识别,键盘消抖
【实验目的】 独立按键的识别方法、键盘消抖等。 【实验现象】 每按一次独立键盘的S2键,与P1口相连的八个发光二极管中点亮的一个往下移动一位。 【实验说明】 关于按键去抖动的解释,我们在手动按键的时候,由于机械抖动或是其它一些非人为的因…...

基于CNN卷积神经网络迁移学习的图像识别实现
基于CNN卷积神经网络迁移学习的图像识别实现 基于CNN卷积神经网络迁移学习的图像识别实现写在前面一,原理介绍迁移学习的基本方法1.样本迁移(Instance based TL)2.特征迁移(Feature based TL)3.模型迁移(Pa…...

【iOS】push和present的区别
【iOS】push和present的区别 文章目录 【iOS】push和present的区别前言pushpop presentdismiss简单小demo来展示dismiss和presentdismiss多级 push和present的区别区别相同点 前言 在iOS开发中,我们经常性的会用到界面的一个切换的问题,这里我们需要理清…...

在Linux服务器上添加用户并设置自动登录
需要在Linux服务器上添加一个新用户,可以使用以下命令 # 这个命令会创建一个新的用户账户,默认情况下不会设置密码,不会在 /home 目录下为新用户创建home目录: # sudo useradd 用户名 # # 如果希望同时为新用户创建家目录&#…...

网站被爬,数据泄露,如何应对不断强化的安全危机?
近年来,众多传统零售商和互联网企业借助大数据、人工智能等先进技术手段,通过场景化设计、优化客户体验、融合线上线下渠道,推动了网络电商行业的消费方式变革,成为电商领域新的增长动力。 但值得注意的是,网络电商带来…...

为什么HTTPS会引入SSL/TLS协议
这时我面试遇到过的问题,整理了一下,希望对大家有帮助! 祝大家秋招顺利! 首先 SSL/TLS 协议通过使用数字证书来实现服务器身份认证, 当用户访问一个 HTTPS 网站时,浏览器会验证服务器的数字证书, 1.首先他对验证整证书是否在有效期 2.其次他会看证书中的服务器域名…...

Spring AOP,通知使用,spring事务管理,spring_web搭建
spring AOP AOP概述 AOP面向切面编程是对面向对象编程的延续(AOP (Aspect Orient Programming),直译过来就是 面向切面编程,AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。) 面向切面编…...

PHP无缝对接预订无忧场馆预订系统小程序源码
无缝对接,预订无忧 —— 场馆预订系统,让每一次活动都完美启航! 一、告别繁琐流程,预订从未如此简单 你是否曾经为了预订一个合适的场馆而焦头烂额?繁琐的咨询、确认、支付流程,让人心力交瘁。但现在&…...

Unet改进30:添加CAA(2024最新改进方法)|上下文锚定注意模块来捕获远程上下文信息。
本文内容:在不同位置添加CAA注意力机制 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 遥感图像中的目标检测经常面临一些日益严峻的挑战,包括目标尺度的巨大变化和不同的测距环境。先前的方法试图通过大核卷积或扩展卷积来扩展主干的空间感受野来解决这…...

OpenAI震撼发布最强模型o1!强化学习突破LLM推理极限
OpenAI新模型无预警上新: o1系列,可以进行通用复杂推理,每次回答要花费更长时间思考。 在解决博士水平的物理问题时,GPT-4o还是“不及格”59.5分,o1一跃来到“优秀档”,直接干到92.8分! 没错…...

速通GPT-2:Language Models are Unsupervised Multitask Learners全文解读
文章目录 GPT系列论文速通引言总览GPT和GPT-2区别Abstract1. 概括2. 具体分析 Introduction1. 概括2. 具体分析当前机器学习系统的局限性希望构建通用型系统数据集与任务通用性缺乏的原因 Approach1. 概括与要点2. 原文阅读翻译3. 具体分析论文核心Training DatasetInput Repre…...

Python 最小公倍数计算器:从基础到应用
目录 引言数学背景 什么是最小公倍数(LCM)计算LCM的方法Python基础 Python简介Python安装和设置使用Python计算最小公倍数 理论基础Python实现详细代码解析 辅助函数LCM计算函数最小公倍数的应用 工作中的应用场景日常生活中的应用场景优化与扩展 代码优化处理多个数字进阶话…...

网络学习-eNSP配置路由器
#PC1网关:192.168.1.254 #PC3网关:192.168.3.254 #PC4网关:192.168.4.254# 注:路由器接口必须配置不同网段IP地址 <Huawei>system-view Enter system view, return user view with CtrlZ. #给路由器两个接口配置IP地址 [Hua…...

在 React 中,如何使用 Context API 来实现跨组件的通信?
在 React 中,Context API 提供了一种方式,允许你在组件树中传递数据,而无需在每个层级手动传递 props。这对于实现跨组件通信非常有用,特别是当你需要在多个组件间共享状态或函数时。 以下是如何使用 Context API 来实现跨组件通…...

【基础算法总结】位运算
目录 一,常见位运算操作总结二,算法原理和代码实现191.位1的个数338.比特位计数461.汉明距离面试题01.01.判断字符是否唯一268.丢失的数字371.两整数之和136.只出现一次的数字137.只出现一次的数字II260.只出现一次的数据III面试题17.19.消失的两个数字 …...

组件通信——provide 和 inject 实现爷孙组件通信
provide 和 inject 实现爷孙组件通信 介绍 provide 和 inject 是 Vue.js 提供的一种在组件之间共享数据的机制,它允许在组件树中的任何地方注入依赖项。这对于跨越多个层级的组件间通信特别有用,因此无需手动将 prop 数据逐层传递下去。 provide&#…...

【ShuQiHere】探索人工智能核心:机器学习的奥秘
【ShuQiHere】 💡 什么是机器学习? 机器学习(Machine Learning, ML)是人工智能(Artificial Intelligence, AI)中最关键的组成部分之一。它使得计算机不仅能够处理数据,还能从数据中学习&#x…...

LeeCode打卡第二十四天
LeeCode打卡第二十四天 第一题:对称二叉树(LeeCode第101题): 给你一个二叉树的根节点 root , 检查它是否轴对称。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* …...

什么是科技与艺术相结合的异形创意圆形(饼/盘)LED显示屏
在当今数字化与创意并重的时代,科技与艺术的融合已成为推动社会进步与文化创新的重要力量。其中,晶锐创显异形创意圆形LED显示屏作为这一趋势下的杰出代表,不仅打破了传统显示设备的形态束缚,更以其独特的造型、卓越的显示效果和广…...

AI大模型知识点大梳理_ai大模型知识学习,零基础入门到精通,收藏这一篇就够了
文章目录 AI大模型是什么AI大模型发展历程AI大模型的底层原理AI大模型解决的问题大模型的优点和不足影响个人观点 AI大模型是什么 AI大模型是指具有巨大参数量的深度学习模型,通常包含数十亿甚至数万亿个参数。这些模型可以通过学习大量的数据来提高预测能力&…...

NVG040W语音芯片:为制氧机带来个性化语音提示和报警功能
在当今社会,家庭医疗设备和健康保健产品越来越受到人们的关注。制氧机作为其中的一种,为许多需要氧气治疗的人们提供了重要的帮助。然而,对于许多用户来说,如何正确操作和维护这些设备仍然是一个挑战。为此,NVG040W语音…...

OpenCV结构分析与形状描述符(12)椭圆拟合函数fitEllipseAMS()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆拟合一组2D点。它返回一个内切于该椭圆的旋转矩形。使用了由[260]提出的近…...

安卓显示驱动
安卓显示驱动是用于在Android设备上提供图形和视频显示的底层软件组件。 显示驱动在Android系统中扮演着至关重要的角色,它们负责将图形和视频内容从系统内存传输到显示屏上。这些驱动程序确保了用户界面、图像、视频和游戏等视觉元素的正常显示。以下是关于安卓显…...

java重点学习-集合(List)
七 集合(List) 7.1 复杂度分析 7.2 数组 1.数组(Array)是一种用连续的内存空间存储相同数据类型 数据的线性数据结构。 2.数组下标为什么从0开始 寻址公式是:baseAddressi*dataTypeSize,计算下标的内存地址效率较高 3.查找的时间复杂度 随机(…...

【PCB测试】最常见的PCB测试方法
系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 一、PCB测试的好处1.发现错误2.降低成本3.节省时间4.减少退货率5.提高安全性 二、PCB测试内容1.孔壁质量2.电镀铜3.清…...

AtCoder Beginner Contest 370 ABCD题详细题解(C++,Python)
前言: 本文为AtCoder Beginner Contest 370 ABCD题的详细题解,包含C,Python语言描述,觉得有帮助或者写的不错可以点个赞 个人感觉D比C简单,C那里的字典序有点不理解, E应该是前缀和加dp,但是是dp不明白,等我明白了会更…...

斯坦福研究人员探讨大型语言模型在社交网络生成中的应用及其在政治同质性上的偏见
社交网络生成在许多领域有着广泛的应用,比如流行病建模、社交媒体模拟以及理解社交现象如两极化等。当由于隐私问题或其他限制无法直接观察真实网络时,创建逼真的社交网络就显得尤为重要。这些生成的网络对于在这些情况下准确建模互动和预测结果至关重要…...

一招教你找到Facebook广告的最佳发帖时间
在社交媒体上做广告时,时机是至关重要的。有时候你投放的广告参与度低,很有可能是因为你没有在适当的时机投放广告。这篇文章会教你如何找到适合自己的广告投放时间,如果你感兴趣的话,就继续看下去吧! 首先࿰…...