jvm内存模型,类加载机制,GC算法,垃圾回收器,jvm线上调优等常见的面试题及答案

JVM内存模型

  • JVM内存模型包括哪些区域
    • 答案:JVM内存模型主要包括以下区域:
      • 程序计数器:是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器,用于记录正在执行的虚拟机字节码指令的地址。
      • Java虚拟机栈:每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
      • 本地方法栈:与Java虚拟机栈类似,不过它是为Native方法服务的。
      • Java堆:是JVM所管理的内存中最大的一块,是被所有线程共享的一块内存区域,几乎所有的对象实例以及数组都在这里分配内存。
      • 方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。在Java 8及之后版本中,永久代被移除,取而代之的是元空间,元空间并不在堆内存中,而是使用本地内存。
  • 堆内存的结构是怎样的
    • 答案:堆内存分为年轻代和老年代,年轻代又分为Eden空间和两个Survivor空间(一般称为Survivor from和Survivor to)。新创建的对象一般会先分配到Eden区,当Eden区满了之后,会触发Minor GC,存活下来的对象会被移动到Survivor区。在Survivor区经过多次GC后仍然存活的对象,会被移动到老年代。老年代主要存放生命周期较长的对象。

类加载机制

  • 什么是类加载
    • 答案:类加载是指将Java类的字节码文件(.class文件)转换成内存中运行时数据结构(如java.lang.Class对象)的过程。这个过程由Java虚拟机的类加载器完成,是Java动态性的基础。
  • 类加载的时机有哪些
    • 答案:Java虚拟机采用惰性加载策略,类会在以下几种情况下被加载:
      • 创建类的实例,通过new关键字或反射机制。
      • 访问类的静态变量或静态方法,注意是主动访问。
      • 反射调用,如通过Class.forName()等方法显式加载类。
      • 初始化类的子类,此时父类也会被加载(若尚未加载)。
      • JVM启动时指定的主类,即包含main方法的类。

GC算法

  • GC有哪些常见的判定对象可回收的方法
    • 答案
      • 引用计数法:给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1,当计数器为0时,就认为这个对象可以被回收。但这种方法存在循环引用的问题,导致对象无法被回收。
      • 可达性分析算法:通过一系列的“GC Roots”对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,即可以被回收。
  • GC的三种收集方法及其原理与特点
    • 答案
      • 标记-清除算法:分为标记和清除两个阶段。首先标记出所有需要回收的对象,在标记完成后,统一回收所有被标记的对象。优点是实现简单,缺点是容易产生内存碎片,导致后续大对象无法分配内存。
      • 复制算法:将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。优点是不会产生内存碎片,缺点是内存利用率低,只使用了一半的内存。
      • 标记-压缩(标记-整理)算法:标记阶段和标记-清除算法一样,标记出所有需要回收的对象,清除阶段不是直接清理被标记的对象,而是将所有存活的对象向一端移动,然后直接清理掉边界以外的内存。优点是解决了内存碎片问题,同时内存利用率比复制算法高,缺点是移动对象时需要一定的开销。

垃圾回收器

  • 常见的垃圾回收器有哪些
    • 答案:常见的垃圾回收器有Serial、Serial Old、ParNew、Parallel Scavenge、Parallel Old、CMS、G1等。
  • CMS收集器与G1收集器的特点
    • 答案
      • CMS收集器:是一种以获取最短回收停顿时间为目标的收集器。采用“标记-清除”算法,具有并发收集、低停顿的特点,但是会产生内存碎片,并且对CPU资源非常敏感,在并发阶段会和用户线程抢占CPU资源。
      • G1收集器:是一种面向堆内存任何部分进行回收的收集器,将堆内存划分为多个大小相等的独立区域(Region),可以预测停顿时间,兼具高吞吐量和低延迟的特点,采用“标记-整理”算法,不会产生内存碎片,能更好地处理大对象和巨型对象。

JVM线上调优

  • 什么情况下需要进行JVM调优
    • 答案:出现以下情况时通常需要进行JVM调优:
      • Heap内存(老年代)持续上涨达到设置的最大内存值。
      • Full GC次数频繁。
      • GC停顿(Stop The World)时间过长(超过1秒,具体值按应用场景而定)。
      • 应用出现OutOfMemory等内存异常。
      • 应用中有使用本地缓存且占用大量内存空间。
      • 系统吞吐量与响应性能不高或下降。
      • 应用的CPU占用过高不下或内存占用过高不下。
  • JVM调优时关注哪些指标
    • 答案
      • 吞吐量:用户代码时间/(用户代码执行时间+垃圾回收时间),吞吐量越高算法越好。
      • 低延迟:STW越短,响应时间越好,暂停时间越短算法越好。
      • Minor GC尽可能多的收集垃圾对象:遵守这一原则可以降低应用程序Full GC的发生频率,因为Full GC较耗时,可能会影响应用程序的延迟要求或吞吐量。

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

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

相关文章

git clone的时候出现出现error

报错如下: Collecting githttps://github.com/haotian-liu/LLaVA.git Cloning https://github.com/haotian-liu/LLaVA.git to /tmp/pip-req-build-360q6tt1 Running command git clone --filterblob:none --quiet https://github.com/haotian-liu/LLaVA.git /t…

Minio搭建并在SpringBoot中使用完成用户头像的上传

Minio使用搭建并上传用户头像到服务器操作,学习笔记 Minio介绍 minio官网 MinIO是一个开源的分布式对象存储服务器,支持S3协议并且可以在多节点上实现数据的高可用和容错。它采用Go语言开发,拥有轻量级、高性能、易部署等特点,并且可以自由…

vue3中ref和reactive响应式数据、ref模板引用(组合式和选项式区别)、组件ref的使用

目录 Ⅰ.ref 1.基本用法:ref响应式数据 2.ref模板引用 3.ref在v-for中的模板引用 ​4.ref在组件上使用 ​5.TS中ref数据标注类型 Ⅱ.reactive 1.基本用法:reactive响应式数据 2.TS中reactive标注类型 Ⅲ.ref和reactive的使用场景和区别 Ⅳ.小结…

javascript实现雪花飘落效果

本文实现雪花飘落效果的 JavaScript 网页设计案例&#xff0c;代码实现如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, init…

项目准备(flask+pyhon+MachineLearning)- 3

目录 1.商品信息 2. 商品销售预测 2.1 机器学习 2.2 预测功能 3. 模型评估 1.商品信息 app.route(/products) def products():"""商品分析页面"""data load_data()# 计算当前期间和上期间current_period data[data[成交时间] > data[成…

FPGA开发,使用Deepseek V3还是R1(3):系统级与RTL级

以下都是Deepseek生成的答案 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;1&#xff09;&#xff1a;应用场景 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;2&#xff09;&#xff1a;V3和R1的区别 FPGA开发&#xff0c;使用Deepseek V3还是R1&#x…

实现 Leaflet 多类型点位标记与聚合功能的实战经验分享

在现代的地理信息系统&#xff08;GIS&#xff09;应用中&#xff0c;地图功能是不可或缺的一部分。无论是展示商业网点、旅游景点还是公共服务设施&#xff0c;地图都能以直观的方式呈现数据。然而&#xff0c;当数据量较大时&#xff0c;地图上可能会出现大量的标记点&#x…

企微审批中MySQL字段TEXT类型被截断的排查与修复实践

在MySQL中&#xff0c;TEXT类型字段常用于存储较大的文本数据&#xff0c;但在一些应用场景中&#xff0c;当文本内容较大时&#xff0c;TEXT类型字段可能无法满足需求&#xff0c;导致数据截断或插入失败。为了避免这种问题&#xff0c;了解不同文本类型&#xff08;如TEXT、M…

【常见BUG】Spring Boot 和 Springfox(Swagger)版本兼容问题

???欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老…

HTTP 协议的发展历程:从 HTTP/1.0 到 HTTP/2.0

HTTP 协议的发展历程&#xff1a;从 HTTP/1.0 到 HTTP/2.0 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是 Web 的基础协议&#xff0c;用于客户端和服务器之间的通信。从 HTTP/1.0 到 HTTP/2.0&#xff0c;HTTP 协议经历了多次重大改…

apload-lab打靶场

1.提示显示所以关闭js 上传<?php phpinfo(); ?>的png形式 抓包&#xff0c;将png改为php 然后放包上传成功 2.提示说检查数据类型 抓包 将数据类型改成 image/jpeg 上传成功 3.提示 可以用phtml&#xff0c;php5&#xff0c;php3 4.先上传.htaccess文件&#xff0…

金融支付行业技术侧重点

1. 合规问题 第三方支付系统的平稳运营&#xff0c;严格遵循《非银行支付机构监督管理条例》的各项条款是基础与前提&#xff0c;其中第十八条的规定堪称重中之重&#xff0c;是支付机构必须牢牢把握的关键准则。 第十八条明确指出&#xff0c;非银行支付机构需构建起必要且独…

Cherry Studio + 火山引擎 构建个人AI智能知识库

&#x1f349;在信息化时代&#xff0c;个人知识库的构建对于提高工作效率、知识管理和信息提取尤为重要。尤其是当这些知识库能结合人工智能来智能化地整理、分类和管理数据时&#xff0c;效果更为显著。我最近尝试通过 Cherry Studio 和 火山引擎 来搭建个人智能知识库&#…

LeetCode 2 - 两数相加

LeetCode 2 - 两数相加 是一道经典链表操作问题&#xff0c;经常作为面试中基础题的变体被考察。掌握多种解法及其变体&#xff0c;并熟悉其核心思路和模板代码&#xff0c;可以快速备战相关链表或大数计算问题。 题目描述 给定两个非空链表&#xff0c;它们代表两个非负整数&…

Qt之QStateMachine等待

在项目中经常需要等待&#xff0c;我们模拟0-30的数&#xff0c;假如我们其中5&#xff0c; 25的数需要进行等待&#xff0c;等待用户处理完自己事情后&#xff0c;按下按钮继续&#xff0c;找Qt的项目中有一个 QStateMachineqstatemmachine类提供了一个分层有限状态机。 QSta…

elpis全栈课程学习之elpis-core学习总结

elpis全栈课程学习之elpis-core学习总结 核心原理 elpis-core是全栈框架elpis的服务端内核&#xff0c;主要应用于服务端接口的开发以及页面的SSR渲染&#xff0c;elpis-core基于约定优于配置的原理&#xff0c;通过一系列的loader来加载对应的文件&#xff0c;大大节约用户的…

ChatGPT与DeepSeek:开源与闭源的AI模型之争

目录 一、模型架构与技术原理 二、性能能力与应用场景 三、用户体验与部署灵活性 四、成本与商业模式 五、未来展望与市场影响 六、总结 随着人工智能技术的飞速发展&#xff0c;ChatGPT和DeepSeek作为两大领先的AI语言模型&#xff0c;成为了行业内外关注的焦点。它们在…

在笔记本电脑上用DeepSeek搭建个人知识库

最近DeepSeek爆火&#xff0c;试用DeepSeek的企业和个人越来越多。最常见的应用场景就是知识库和知识问答。所以本人也试用了一下&#xff0c;在笔记本电脑上部署DeepSeek并使用开源工具搭建一套知识库&#xff0c;实现完全在本地环境下使用本地文档搭建个人知识库。操作过程共…

DeepSeek蒸馏TinyLSTM实操指南

一、硬件准备 阶段推荐配置最低要求训练阶段NVIDIA A100 80GB 4RTX 3090 24GB 1量化阶段Intel Xeon Gold 6248R CPUi7-12700K + 64GB RAM部署阶段Jetson Xavier NX开发套件Raspberry Pi 4B 8GB二、软件环境搭建 # 创建Python虚拟环境 conda create -n distil python=3.9 conda…

Linux ls 命令

Linux ls&#xff08;英文全拼&#xff1a; list directory contents&#xff09;命令用于显示指定工作目录下之内容&#xff08;列出目前工作目录所含的文件及子目录)。 语法 ls [-alrtAFR] [name...] 参数 : -a 显示所有文件及目录 (. 开头的隐藏文件也会列出)-d 只列出目…