当前位置: 首页 > news >正文

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网关&#xff1a;192.168.1.254 #PC3网关&#xff1a;192.168.3.254 #PC4网关&#xff1a;192.168.4.254# 注&#xff1a;路由器接口必须配置不同网段IP地址 <Huawei>system-view Enter system view, return user view with CtrlZ. #给路由器两个接口配置IP地址 [Hua…...

在 React 中,如何使用 Context API 来实现跨组件的通信?

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

【基础算法总结】位运算

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

组件通信——provide 和 inject 实现爷孙组件通信

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

【ShuQiHere】探索人工智能核心:机器学习的奥秘

【ShuQiHere】 &#x1f4a1; 什么是机器学习&#xff1f; 机器学习&#xff08;Machine Learning, ML&#xff09;是人工智能&#xff08;Artificial Intelligence, AI&#xff09;中最关键的组成部分之一。它使得计算机不仅能够处理数据&#xff0c;还能从数据中学习&#x…...

LeeCode打卡第二十四天

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

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...