jvm面试常问

类的加载机制

Java的类加载机制是Java虚拟机(JVM)运行时负责加载类文件并将其转换成可执行的字节码的过程。类加载机制主要包括以下三个步骤:加载(Loading)、链接(Linking)、初始化(Initialization)。这三个步骤统称为类加载过程。

  • 加载(Loading):

加载是指将类的二进制数据读入到内存中,并生成一个代表该类的 java.lang.Class 对象。类加载器通过类的全限定名(Fully Qualified Name)来定位和加载类的字节码。

  • 链接(Linking):

链接阶段包括三个步骤:验证(Verification)、准备(Preparation)、解析(Resolution)。
验证: 确保被加载的类是合法、符合规范的。主要验证类的格式、语义、字节码等。
准备: 为类的静态变量分配内存,并设置默认初始值。
解析: 将类、接口、字段和方法的符号引用解析为直接引用。

  • 初始化(Initialization):

在这个阶段,类的静态变量会被赋予初始值,静态代码块会被执行。这是类加载过程的最后一步,也是真正意义上类加载完成的时刻。在初始化阶段,虚拟机会保证一个类的初始化是线程安全的,即只会执行一次。


java内存区域的介绍

Java 内存区域是Java虚拟机(JVM)在运行过程中管理的不同内存区域,用于存储不同类型的数据和执行不同的操作。Java内存区域主要包括以下几个部分:

  • 方法区(Method Area):

方法区是被所有线程共享的内存区域,用于存储类信息、常量、静态变量、即时编译器编译后的代码等。在HotSpot虚拟机中,方法区被称为"永久代"(Permanent Generation),但在Java 8及以后的版本中,永久代被元空间(Metaspace)所替代。

  • Java 堆(Heap):

堆是用于存储对象实例的内存区域,是Java虚拟机管理的最大的一块内存。堆被所有线程共享,是垃圾回收的主要工作区域。

  • 虚拟机栈(Stack):

栈是线程私有的内存区域,每个线程都有自己的栈。栈用于存储局部变量、方法调用、方法返回等信息。栈帧(Stack Frame)是栈的基本组成单元,每个方法调用都会创建一个栈帧。栈是一个后进先出(LIFO)的数据结构。

  • 本地方法栈(Native Method Stack):

本地方法栈与栈类似,用于存储调用本地方法(Native Method)时的信息。每个线程都有自己的本地方法栈。

  • 程序计数器(Program Counter Register):

用于存储当前线程执行的字节码地址。每个线程都有自己的PC寄存器,保证线程切换后能够恢复到正确的执行位置。


jvm垃圾回收机制

  • 标记-清除算法(Mark and Sweep):

标记阶段: 从根节点出发,标记所有能够被访问到的对象。
清除阶段: 清除所有未被标记的对象,释放其占用的内存空间。
缺点: 会产生内存碎片,影响分配大对象。

  • 复制算法(Copying):

将堆分为两个区域,一半为活动对象,一半为空闲。
活动对象区域满了后,将存活的对象复制到另一半空闲区域,同时清理掉已经使用的区域。
缺点: 只能使用一半的内存,适用于新生代。

  • 标记-整理算法(Mark and Compact):

类似于标记-清除,但标记后会将存活对象向一端移动,然后清理掉边界以外的部分。
相对于标记-清除,减少了内存碎片。

  • 分代收集算法(Generational Collection):

将堆分为新生代和老年代,每代使用不同的垃圾回收算法。
新生代一般使用复制算法,老年代一般使用标记-清除或标记-整理算法。
优势: 利用了对象的生命周期长短不同的特点,新生代的对象生命周期短,老年代的对象生命周期长。

  • 并行垃圾回收算法(Parallel Garbage Collection):

使用多个线程同时进行垃圾回收,提高回收效率。
主要包括并行标记-清除(Parallel Mark and Sweep)、并行复制(Parallel Scavenge)等。

  • CMS算法(Concurrent Mark-Sweep):

在标记和清理阶段尽量与应用程序线程并发执行,减少停顿时间。
首先进行初始标记、并发标记、重新标记,最后是并发清理。

  • G1算法(Garbage First):

将堆划分为多个独立的区域,包括新生代、老年代和一部分混合区域。
根据垃圾回收的预期停顿时间优化,尽量在用户线程运行的同时进行垃圾回收。


什么是GC,作用是什么

GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,

忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,

Java语言没有提供释放已分配内存的显示操作方法。Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:System.gc()或Runtime.getRuntime().gc(),但JVM可以屏蔽掉显示的垃圾回收调用。 

垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低优先级的线程运行不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。

在Java诞生初期,垃圾回收是Java最大的亮点之一,因为服务器端的编程需要有效的防止内存泄露问题,然而时过境迁,如今Java的垃圾回收机制已经成为被诟病的东西。移动智能终端用户通常觉得iOS的系统比Android系统有更好的用户体验,其中一个深层次的原因就在于Android系统中垃圾回收的不可预知性。


解释一下synchronized 关键字

Java 中的锁分为显示锁和隐式锁。

隐式锁由 synchronized 关键字实现。

显示锁由 Lock 接口和 AQS 框架等等类来实现。

Java 中的每⼀个对象都可以作为锁,有三种加锁的⽅式:
(1)对于普通同步⽅法,锁是当前实例对象。
(2)对于静态同步⽅法,锁是当前类的 Class 对象
(3)对于同步⽅法块,锁是 Synchonized 括号⾥配置的对象。


JVM 启动时都有哪些参数

「堆内存相关」
-Xms :设置初始堆的大小
-Xmx :设置最大堆的大小
-Xmn :设置年轻代大小,相当于同时配置 -XX:NewSize和 -XX:MaxNewSize 为一样的值
-Xss :每个线程的堆栈大小
-XX:NewSize :设置年轻代大小(for 1.3/1.4)
-XX:MaxNewSize :年轻代最大值(for 1.3/1.4)
-XX:NewRatio :年轻代与年老代的比值(除去持久代)
-XX:SurvivorRatio :Eden区与Survivor区的的比值
-XX:PretenureSizeThreshold :当创建的对象超过指定大小时,直接把对象分配在老年代
-XX:MaxTenuringThreshold :设定对象在Survivor复制的最大年龄阈值,超过阈值转移到老年代
「垃圾收集器相关」
-XX:+UseParallelGC :选择垃圾收集器为并行收集器
-XX:ParallelGCThreads=20 :配置并行收集器的线程数
-XX:+UseConcMarkSweepGC :设置年老代为并发收集
-XX:CMSFullGCsBeforeCompaction=5 :由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行5次GC以后对内存空间进行压缩、整理
-XX:+UseCMSCompactAtFullCollection :打开对年老代的压缩。可能会影响性能,但是可以消除碎片
「辅助信息相关」
-XX:+PrintGCDetails :打印GC详细信息
-XX:+HeapDumpOnOutOfMemoryError :让JVM在发生内存溢出的时候自动生成内存快照,用于排查问题
-XX:+DisableExplicitGC禁止系统System.gc() :防止手动误触发FGC造成问题.
-XX:+PrintTLAB :查看TLAB空间的使用情况

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法---动态规划练习-7(按摩师)【类似打家劫舍】

按摩师 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址:点这里 2. 讲解算法原理 首先,给定一个整数数组 nums,其中 nums[i] 表示第 i 天的预约时间长度。 定义两个辅助数组 f 和 g,长度都为 n(n 是数组…

STM32时钟简介

1、复位:使时钟恢复原始状态 就是将寄存器状态恢复到复位值 STM32E10xxx支持三种复位形式,分别为系统复位、上电复位和备份区域复位。 复位分类: 1.1系统复位 除了时钟控制器的RCC_CSR寄存器中的复位标志位和备份区域中的寄存器以外,系统 复位将复位…

SQL-CRUD-2数据库实验

目录 第一关任务描述 相关知识 插入完整内容的行 插入选定内容的行 编程要求 测试说明 第一关代码 第二关任务描述 相关知识 删除表中的指定行 删除表中的所有行 编程要求 测试说明 第二关代码 第三关任务描述 相关知识 更新表中的指定行 编程要求 测试说明…

【学习】信创产品软件测试企业建设参考清单

“信创,即信息技术应用创新产业,涉及IT基础设施、基础软件、应用软件、信息安全等方面,产品覆盖面广、专业性强。作为目前的一项国家战略,也是当今形势下国家经济发展的新动能,信创产业发展已经成为促进经济数字化转型…

SlerfTools:简化操作,激发Solana生态创新潜能

在区块链世界的快速演变中,Solana生态系统以其独特的高性能吸引了全球的目光。然而,随着生态系统的蓬勃发展,用户和开发者面临的挑战也日渐增多。正是在这样的背景下,一个名为SlerfTools的新星项目应运而生,它承诺将为Solana带来一场革命性的变革。 项目的诞生 SlerfTools并非…

【QT+QGIS跨平台编译】043:【libprotobuf-lite+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

点击查看专栏目录 文章目录 一、libprotobuf-lite介绍二、文件下载三、文件分析四、pro文件五、编译实践一、libprotobuf-lite介绍 libprotobuf-lite 是 Protocol Buffers 的 C++ 轻量级运行时库,专门设计用于在资源受限的环境下使用。与标准的 libprotobuf(Protocol Buffers…

深入浅出的揭秘游标尺模式与迭代器模式的神秘面纱 ✨

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自:设计模式深度解析:深入浅出的揭秘游标尺模式与迭代…

力扣 718. 最长重复子数组

题目来源:https://leetcode.cn/problems/maximum-length-of-repeated-subarray/description/ C题解(思路来源代码随想录):动态规划 确定dp数组(dp table)以及下标的含义。dp[i][j] :以下标i - …

速通数据结构第三站 单链表

系列文章目录 速通数据结构与算法系列 1 速通数据结构与算法第一站 复杂度 http://t.csdnimg.cn/sxEGF 2 速通数据结构与算法第二站 顺序表 http://t.csdnimg.cn/WVyDb 感谢佬们支持! 目录 系列文章目录 前言一、单链表 1 结构体 …

踏上机器学习之路:探索数据科学的奥秘与魅力

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

hxp CTF 2021 - A New Novel LFI(新颖的解法)

一、环境 unbentu,docker https://2021.ctf.link/assets/files/includers%20revenge-25377e1ebb23d014.tar.xz 二、解析 PHP Filter 当中有一种 convert.iconv 的 Filter ,可以用来将数据从字符集 A 转换为字符集 B ,其中这两个字符集可以…

记录pycharm配置Anaconda环境时没有反应的问题

记录pycharm配置Anaconda环境时没有反应的问题 背景 下载最新pycharm后在设置中配置add interpreter Anaconda环境时,x选中conda.ba文件点击Load Enviroments后,没有反应,就闪了一下,也有添加成功 探索路程 试过了重启&#x…

NineData与StarRocks商业化运营公司镜舟科技完成产品兼容认证

近日,镜舟科技与NineData完成产品兼容测试。在经过联合测试后,镜舟科技旗下产品与NineData云原生智能数据管理平台完全兼容,整体运行高效稳定。 镜舟科技致力于帮助中国企业构建卓越的数据分析系统,打造独具竞争力的“数据护城河”…

量化交易入门(二十五)什么是RSI,原理和炒股实操

前面我们了解了KDJ,MACD,MTM三个技术指标,也进行了回测,结果有好有坏,今天我们来学习第四个指标RSI。RSI指标全称是相对强弱指标(Relative Strength Index),是通过比较一段时期内的平均收盘涨数和平均收盘跌数来分析市…

leetcode热题100.柱状图中最大的矩形

Problem: 84. 柱状图中最大的矩形 文章目录 题目思路复杂度Code 题目 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 输入:hei…

RAM IP核

1.原理 数据使能信号充当掩码的作用。1表示1字节就是8个位有效。

答题小程序功能细节揭秘:如何提升用户体验和满足用户需求?

答题小程序功能细节体现 随着移动互联网的快速发展,答题小程序成为了用户获取知识、娱乐休闲的重要平台。一款优秀的答题小程序不仅应该具备简洁易用的界面设计,更应该在功能细节上做到极致,以提升用户体验和满足用户需求。本文将从题库随机…

八大技术趋势案例(虚拟现实增强现实)

科技巨变,未来已来,八大技术趋势引领数字化时代。信息技术的迅猛发展,深刻改变了我们的生活、工作和生产方式。人工智能、物联网、云计算、大数据、虚拟现实、增强现实、区块链、量子计算等新兴技术在各行各业得到广泛应用,为各个领域带来了新的活力和变革。 为了更好地了解…

day56 动态规划part13

300. 最长递增子序列 中等 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,…

【FedCoin: A Peer-to-Peer Payment System for Federated Learning】

在这篇论文中,我们提出了FedCoin,一个基于区块链的点对点支付系统,专为联邦学习设计,以实现基于Shapley值的实际利润分配。在FedCoin系统中,区块链共识实体负责计算SV,并且新的区块是基于“Shapley证明”&a…
最新文章