JVM面试真题总结(九)

news2024/11/15 11:47:46

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

在这里插入图片描述

描述CMS垃圾收集的工作过程

CMS(Concurrent Mark Sweep)垃圾收集器的工作过程

主要可以分为以下四个阶段:

初始标记(Initial Mark)

  • 这个阶段的目标是标记所有的 GC Roots 能直接关联到的对象。
  • 这个阶段需要停止所有的用户线程,但是一般情况下,这个阶段会很快完成。

并发标记(Concurrent Mark)

  • 在这个阶段,垃圾收集器会遍历对象图,并标记所有的存活对象,从初始标记的对象开始。
  • 这个阶段是与用户线程并发执行的,不需要停止用户线程。

重新标记(Remark)

  • 因为在并发标记阶段,用户线程还在运行,可能会修改了对象图,所以需要重新标记一次,以确保标记的准确性。
  • 这个阶段需要停止所有的用户线程。

并发清除(Concurrent Sweep)

  • 在这个阶段,垃圾收集器会清除所有未被标记的对象。
  • 这个阶段是与用户线程并发执行的,不需要停止用户线程。

如何防止内存泄漏?

防止内存泄漏主要需要对代码进行精细的管理和控制,以下是一些常用的方法:

及时释放对象:

  • 当对象不再使用时,及时将其引用设置为null,以便让垃圾回收器能够回收。

使用弱引用(WeakReference):

  • 在Java中,使用WeakReference可以在不影响垃圾回收器回收对象的同时,还能使用到这个对象。
  • 当该对象只剩下弱引用时,垃圾回收器会回收它。

避免使用静态变量:

  • 静态变量会在类加载时初始化,并在整个程序运行期间都存在,容易造成内存泄漏。
  • 如果非要使用,应确保在不需要时将其设置为null

及时关闭流、数据库连接等资源:

  • 这些资源都是有限的,使用完后必须及时关闭,否则会造成资源泄漏。

使用finally块:

  • 在Java中,finally块始终会被执行,无论是否有异常发生。
  • 因此,可以在finally块中释放资源。

避免在对象中保存过多的数据:

  • 如果一个对象保存了大量的数据,那么当这个对象被其他对象引用时,会消耗大量的内存。

使用内存分析工具:

  • 内存分析工具(如MAT,VisualVM等)可以帮助你找出内存泄漏的来源,从而更好地修复问题。

对集合类进行适当的管理:

  • 对于集合类,如List,Map等,应该避免让它们过大,并且在不再使用它们时,应该清空或者设置为null

注意线程的使用:

  • 如果线程对象得不到及时的销毁,也会造成内存泄漏。
  • 因此,对于线程对象,我们要特别小心,确保其生命周期得到良好的管理。

简述内存屏障及其类型

内存屏障(Memory Barrier),也被称为内存栅栏,是一种处理器指令

  • 用于防止特定操作的重排序。

它可以确保某些内存操作的顺序性,以及它们对其他处理器可见的顺序。

内存屏障是处理器设计和多线程编程中的重要概念

  • 它是实现诸如volatile,synchronized等高级同步构造的基础。

内存屏障主要有以下四种类型:

LoadLoad屏障:

  • 这种屏障确保了屏障之前的所有Load操作在屏障之后的Load操作之前完成。
    • 即不允许Load操作的重排序。

StoreStore屏障:

  • 这种屏障确保了屏障之前的所有Store操作在屏障之后的Store操作之前完成。
    • 即不允许Store操作的重排序。

LoadStore屏障:

  • 这种屏障确保了屏障之前的所有Load操作在屏障之后的Store操作之前完成。

StoreLoad屏障:

  • 这种屏障确保了屏障之前的所有Store操作在屏障之后的Load操作之前完成。
  • 这是最强的一种内存屏障,也是开销最大的一种。

在Java中,volatile关键字和synchronized关键字的实现就使用了内存屏障。

例如,对volatile变量的写操作会插入StoreStore和StoreLoad屏障

  • 读操作会插入LoadLoad和LoadStore屏障。

而synchronized关键字在锁定和解锁时也会插入相应的内存屏障,以确保操作的顺序性和可见性。

哪些情况会导致栈内存溢出?

栈内存溢出一般发生在递归调用且递归深度过深的场景。

  • 当一个线程请求的栈深度大于JVM所允许的深度,将抛出StackOverflowError异常。

栈内存主要用于存储局部变量和执行动态链接,还用于方法调用和返回。

  • 每次方法调用都会创建一个新的栈帧,这个栈帧会被添加到线程的栈顶。
  • 如果这个方法调用其他方法,那么新的栈帧会继续被添加到栈顶。
    • 当方法调用完成,相应的栈帧会被弹出栈。

每个线程都有一个私有的JVM栈,其大小可以固定也可以动态扩展。

  • 如果固定大小的栈满了,或者动态扩展的栈无法继续扩展,那么JVM就会抛出StackOverflowError

例如,如果你写了一个递归函数,没有提供适当的递归出口,那么这个函数就会无限递归下去

  • 每次递归都会向栈添加一个新的栈帧,最终导致栈内存溢出。
public void recursive() {
    recursive();
}

以上面的代码为例,这个方法会不断地调用自己,每次调用都会创建一个新的栈帧并压入栈中

  • 但是没有任何方法可以弹出栈帧,因此最终会导致栈内存溢出。

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

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

相关文章

代码随想录训练营 Day60打卡 图论part10 SPFA算法 Bellman-Ford 之判断负权回路 Bellman-Ford 之单源有限最短路

代码随想录训练营 Day60打卡 图论part10 一、Bellman_ford 队列优化算法(又名SPFA) 例题:卡码94. 城市间货物运输 I 题目描述 某国为促进城市间经济交流,决定对货物运输提供补贴。共有 n 个编号为 1 到 n 的城市,通过…

Monster Sound FX Pack 2 怪物恶魔野兽声效包

这是受最新电影和游戏启发而创作的一系列超凡怪兽音效中的第二卷。Monster Sound FX Pack 2 包含精心设计的声音,充满个性,为听众带来新的体验。这些声音经过专业设计,是严肃的声音设计师和游戏开发者的必备品! 发现声音非常适合龙、野兽、外星人、兽人、地精、巨人、巨魔、…

【Qt笔记】QScrollArea控件详解

目录 引言 一、QScrollArea 的基本概念 二、QScrollArea 的主要属性 2.1 设置内容大小是否随滚动区域变化 2.2 设置水平与垂直滚动条 2.3 设置视口外边距 三、QScrollArea 的常用方法 3.1 设置显示小部件 3.2 返回当前设置的小部件 3.3 设置内部小部件是否可以填充…

基于51单片机的16X16点阵显示屏proteus仿真

地址: https://pan.baidu.com/s/1JQ225NSKweqf1Zlad_f1Mw 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectro…

ZW3D二次开发_UI_非模板表单_设置表单显示位置

1.ZW3D弹出非模板表单时可以设置弹出位置(居中、左下角、右上角等) 2.假设已创建好非模板表单 3.在Form属性中添加form_pos属性 4.输入值 base,CTR,0.0 ,如下图 也可以设置为其他值显示在不同的位置,如下 5.重新编译,…

宏电5G工业互联网解决方案荣获第七届“绽放杯”5G应用征集大赛5G应用融合产品专题赛优秀奖。

近日,“宏电5G工业互联网解决方案赋能传统企业数字化转型升级”项目荣获第七届“绽放杯”5G应用征集大赛5G应用融合产品专题赛优秀奖。 “绽放杯”由中国信息通信研究院及三大运营商共同主办,是国内最具影响力的全国性5G应用赛事,本次“绽放…

大数据-136 - ClickHouse 集群 表引擎详解1 - 日志、Log、Memory、Merge

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

《深入理解 Java 中的多线程基础(篇一)》

多线程基础 概述 现代操作系统(Windows,macOS,Linux)都可以执行多任务。多任务就是同时运行多个任务。 例如:播放音乐的同时,浏览器可以进行文件下载,同时可以进行QQ消息的收发。 CPU执行代码…

发展与监管协同发力 人工智能算法领域已形成良好生态

发展与监管协同发力 人工智能算法领域已形成良好生态 近日,全国组织机构统一社会信用代码数据服务中心对国家网信办公示的人工智能领域备案信息进行了详尽的分析,揭示了我国人工智能产业的蓬勃景象。据统计,我国人工智能领域的备案主体遍布各…

uni-app生命周期(三)

文章目录 一、uni-app的生命周期二、应用生命周期三、页面的生命周期函数1.简介2.页面加载时序介绍3.页面加载常见问题4.页面加载顺序4.部分生命周期介绍 四、组件的生命周期函数 一、uni-app的生命周期 应用生命周期(整个App的生命周期) 在app.vue里面…

认知杂谈61《天呐!“稳住,别浪” 竟藏着改变人生的惊天秘密,不看后悔一辈子!》

内容摘要: 生活要耐心,记住 “稳住,别浪”。遇难关别慌,如考教资、学平面设计等,一步步来。保护名声与人脉,多交靠谱朋友。越乱越要静,困难时冷静分析。培养耐心,认识天性、明确预算…

多个系统运维压力大?统一运维管理为IT轻松解忧

企业基于网络安全管理需要,采用防火墙、网闸、云桌面等多种方式进行网络隔离,网络隔离后,数据仍需在不同网络区域间流转,此时便产生了网间数据摆渡需求。为了业务有序正常开展,同时保证严密的网络隔离架构不受破坏&…

云曦2024秋季学期开学考复现

Web 学习高数 资料:命令执行中关于PHP正则表达式的一些绕过方法_正则表达式中过滤的怎么绕过-CSDN博客 记 [CISCN 2019 初赛]Love Math三种解法-CSDN博客 WEB攻防-RCE代码&命令执行&过滤绕过&异或无字符&无回显方案&黑白盒挖掘_代码执行 异…

Snowflake 如何通过 Apache Iceberg 和 Polaris 为大数据的未来提供动力

Snowflake 的使命是让每个组织都成为数据驱动型组织。凭借围绕 Apache Iceberg 的最新创新和 Polaris 的推出,这家数据云公司使开发人员、工程师和架构师能够比以往任何时候都更快、更轻松地利用大数据获得变革性的业务见解。 将开放标准引入数据云 Snowflake 战略的核心是采…

提升RAG系统的回答质量:高质量文档解析终极干货

为什么RAG系统重点解析PDF? 在RAG系统中,PDF文档成为重点解析对象的原因与其在企业中的广泛应用以及其自身的优势密切相关。 PDF文档在企业中的普遍使用 行业标准格式:PDF(可移植文档格式)是各行业用来分发和保存数…

抓机遇,创发展︱2025 第十二届广州国际汽车零部件加工技术及汽车模具展览会,零部件国产浪潮不可阻挡

抓机遇,创发展︱2025 第十二届广州国际汽车零部件加工技术及汽车模具展览会,零部件国产浪潮不可阻挡 汽车零部件行业是汽车工业发展的基础,是支撑汽车工业持续稳步发展前提条件。随着经济全球化和市场一体化进程的推进,汽车零部件…

【devops】devops-git之git分支与标签使用

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

Python画笔案例-047 绘制雪花

1、绘制雪花 通过 python 的turtle 库绘制 雪花,如下图: 2、实现代码 绘制 雪花,以下为实现代码: """雪花.py """ import turtledef draw_branch(d):for _ in range(2):turtle.fd(d)turtle.lt(45)…

实时分析都靠它→揭秘YashanDB列式存储引擎的技术实现

01 概述 YashanDB列式存储引擎,又称为LSC(Large-scale Storage Columnar Table)。其通过自研的CBO优化器、向量化执行、原生列存格式等技术,达到业界领先的查询分析能力。 YashanDB LSC是专为海量数据的实时分析场景而设计,致力…

vue3 动态 svg 图标使用

前言 在做后台管理系统中,我们经常会用到很多图标,比如左侧菜单栏的图标 当然这里 element-ui 或者 element-plus 组件库都会提供图标 但是在有些情况下 element-ui 或者 element-plus 组件库提供的图标满足不了我们的需求时,这个时候我们就需要自己去网上找一些素材或者…