JVM面试真题总结(七)

news2024/11/23 13:22:01

文章收录在网站: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无法在预设的时间内完成垃圾收集。

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

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

相关文章

Rocky Linux 9 初次安装后启用 SSH Root 远程登录

Rocky Linux 9 是由 CentOS 的创始人发布的版本,目的是解决 CentOS 停服后企业用户的替代需求。Rocky Linux 9 基于 Red Hat Enterprise Linux 9 下游版本。在 Rocky Linux 9 中,为了增强系统的安全性,默认禁用了 SSH root 密码登录。这是为了…

第12章 进入保护模式

第12章 进入保护模式 章节一开始说明了为什么要有保护模式?后续介绍了如何进入保护模式。 实模式:在实模式下,程序是可以“为所欲为”的。它想访问内存的哪一部分,都可以很轻松地通过设置段地址和偏移地址来办到。 保护模式&am…

Plasma FX

Plasma FX是使用自定义着色器的等离子效果的集合。 通过调整粒子系统参数和颜色,可以轻松自定义效果。 特征 50+效果 定制化 等离子粒子着色器 演示场景 移动预制件 下载:​​Unity资源商店链接资源下载链接 效果图:

nodejs基础教程之-异步编程promise/async/generator

1. 异步 所谓"异步",简单说就是一个任务分成两段,先执行第一段,然后转而执行其他任务,等做好了准备,再回过头执行第二段,比如,有一个任务是读取文件进行处理,异步的执行过程就是下面…

C#获取计算机信息

目录 效果 项目 代码 下载 效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Management; n…

基于SSM的二手物品交易管理系统的设计与实现 (含源码+sql+视频导入教程+文档+PPT)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的二手物品交易管理系统7拥有两种角色 管理员:用户管理、分类管理、商品管理、订单管理、系统管理等 用户:登录注册、充值、收货、评价、收藏、购物车、订…

vue + Element UI table动态合并单元格

一、功能需求 1、根据名称相同的合并工作阶段和主要任务合并这两列,但主要任务内容一样,但要考虑主要任务一样,但工作阶段不一样的情况。(枞向合并) 2、落实情况里的定量内容和定性内容值一样则合并。(横向…

【机器学习】马尔可夫随机场的基本概念、和贝叶斯网络的联系与对比以及在python中的实例

引言 马尔可夫随机场(Markov Random Field,简称MRF)是一种用于描述变量之间依赖关系的概率模型,它在机器学习和图像处理等领域有着广泛的应用 文章目录 引言一、马尔科夫随机场1.1 定义1.2 特点1.3 应用1.4 学习算法1.5 总结 二、…

使用 Apache Spark 和 Deequ 分析大数据集

在当今的数据驱动环境中,掌握使用 Apache Spark 和 Deequ 对大型数据集进行分析对于任何处理数据分析、SEO 优化或需要深入研究数字内容的类似领域的专业人士来说都至关重要。 Apache Spark 提供处理大量数据所需的计算能力,而 Deequ 提供质量保证层&am…

杨氏矩阵中查找某个数字是否存在(不能使用遍历)

杨氏矩阵&#xff1a; 有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的 如图所示&#xff1a; i为行&#xff0c;j为列 如果要找9&#xff0c;先从arr【0】【2】处开始找&#xff0c;3<9,i,排除第一行&#xff0c;6<9,i,排除第…

基于SSM和VUE的药品管理系统(含源码+sql+视频导入教程+文档)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM和VUE的药品管理系统2拥有两种角色 管理员&#xff1a;药品管理、出库管理、入库管理、销售员管理、报损管理等 销售员&#xff1a;登录注册、入库、出库、销售、报损等 1.1 背景…

c++习题31-阶乘和

目录 一&#xff0c;题目 二&#xff0c;思路 三&#xff0c;代码 一&#xff0c;题目 描述 用高精度计算出 S1!2!3!…n!&#xff08;n≤50&#xff09;,其中“!”表示阶乘&#xff0c;例如&#xff1a;5!54321。 输入正整数n&#xff0c;输出计算结果S。 输入描述 …

微信公众号管理系统-需求整理

微信公众号管理系统-需求整理 文章目录 一、拟开发功能1.公众账号管理(必须)2.菜单管理(必须)2.1 跳转网页(view)2.2 发送消息(media_id)2.3 永久素材管理2.4 打开指定小程序(miniprogram)2.5 自定义点击事件(click)3.权限控制(必须)二、参与人员三、开发周期四、环境及…

二叉树的层序遍历-广度优先遍历

正常来讲二叉树的层序遍历 我们 使用递归 &#xff0c;来进行 就可以得到正确答案&#xff0c;但是有时候递归比较难以理解&#xff0c;我们今天用队列的形式 来进行二叉树的层序遍历 我们使用队列对二叉树进行层序遍历的核心思想有两个 1. 我们用队列 记录二叉树每一层的…

240908-结合DBGPT与Ollama实现RAG本地知识检索增强

A. 最终效果 B. 背景说明 DBGPT在0.5.6版本中开始支持Ollama&#xff1a;v0.5.6 版本更新 网友对其Web端及界面端的设置进行了分享&#xff1a; feat(model): support ollama as an optional llm & embedding proxy by GITHUBear Pull Request #1475 eosphoros-ai/DB-G…

【新手必看】Windows 上安装 Minio及简单使用

一&#xff0c;minio是什么&#xff1f; MinIO 是一个高性能、分布式的对象存储系统&#xff0c;专门用于存储大量非结构化数据&#xff0c;例如图片、视频、日志文件、备份等&#xff0c;且一个对象文件可以是任意大小&#xff0c;从几kb到最大5T不等。Minio是一个非常轻量的服…

【数学建模】2024年国赛成绩公布时间预测

经过三天三夜的奋战&#xff0c;2024年数学建模国赛也宣告结束&#xff0c;相信这几天超高强度的比赛也让大家精疲力竭了&#xff0c;所以经过几天的调整&#xff0c;大家都恢复过来了吧。能够在高强度的压力下坚持这么久&#xff0c;大家都超级厉害的&#xff01; 当然完整提交…

如何更好地解释你的想法并说服他人

这篇内容讨论了如何更有效地解释你的思想和想法&#xff0c;并说服他人。提出了几个原则和策略&#xff0c;如意想不到、简单性、具体化、故事性和情感。 中文 1 我最近读了一本关于有效沟通的书&#xff0c;名为《让你的想法更具说服力》&#xff08;《创意黏力学》&#x…

僵尸网络开发了新的攻击技术和基础设施

臭名昭著的 Quad7 僵尸网络&#xff08;也称为 7777 僵尸网络&#xff09;不断发展其运营&#xff0c;最近的发现表明其目标和攻击方法都发生了重大变化。 根据 Sekoia.io 的最新报告&#xff0c;Quad7 的运营商正在开发新的后门和基础设施&#xff0c;以增强僵尸网络的弹性&a…

ISAC: Toward Dual-Functional Wireless Networks for 6G and Beyond【论文阅读笔记】

此系列是本人阅读论文过程中的简单笔记&#xff0c;比较随意且具有严重的偏向性&#xff08;偏向自己研究方向和感兴趣的&#xff09;&#xff0c;随缘分享&#xff0c;共同进步~ Integrated Sensing and Communications: Toward Dual-Functional Wireless Networks for 6G and…