JVM面试题总结

1.介绍一下JVM的内存结构

  JDK1.8及以后,JVM主要分为元空间、堆、虚拟机栈、本地方法栈、程序计数器五个部分,另外还有一个直接内存部分,是直接属于操作系统的。

  其中元空间、堆是线程共享的,虚拟机栈、本地方法栈、程序计数器是线程私有的。

  元空间:主要存储的是Java中类的信息,包括类名、常量池、类的字段和方法等。

  堆:存储的是各种对象,垃圾回收(GC)的主要区域。

  虚拟机栈:主要存储的是局部变量表、操作数栈、动态链接、方法返回地址。

  本地方法栈:存储的是本地native方法的局部变量表、操作数栈、动态链接、方法返回地址。

2.JDK1.7之前和1.8之后的JVM的区别

  JDK1.7以前,永久代位于堆内,使用虚拟机内存,是一个固定大小的区域,很容易超出内存,会产生OutOfMemoryError的错误,并且位于虚拟机内存时,垃圾回收(GC)的效率非常低。

  JDK1.8之后,元空间替代了永久代,以往方法区的永久代是位于堆内部的,JDK1.8的元空间位于堆外,不使用虚拟机的内存而是本地内存。

3.JVM的类加载过程

  JVM的类加载过程分为加载验证、准备、解析、初始化五个步骤,其中验证、准备、解析统称为连接。

4.类加载器有哪些

  自上而下,类加载器分别有BootStrapClassLoader(启动类加载器)、ExtensionClassLoader(扩展类加载器)、ApplicationClassLoader(启动类加载器)、UserClassLoader(用户自定义  加载器)。

5.介绍一下JVM的双亲委派机制以及作用

  双亲委派机制指当类加载器受到加载请求时,不是先自己尝试加载这个类,而是把它交给自己的父类加载器去处理,依次到顶层的类加载器,如果父类加载器没有搜索到这个类,再交给子类加载器去加载。

  作用:①保证Java核心类的唯一性,用户自己如果写相同名称的类也不会使核心类无法使用。

             ②提高了安全性,防止不可信的类假冒核心类。

6.GC是什么,什么时候触发GC

  GC是指JVM自动地对一些不使用的对象进行垃圾回收。

  GC的触发机制通常有:内存不足;手动请求,比如调用System.gc();

7.判断垃圾的方法有哪些

  判断垃圾回收主要有以下两种方法:

  ①引用计数器法,即每个对象都具有一个引用计数器,每被其他对象引用一次就+1,引用失效就-1。

  这种方法最大的缺陷就是无法解决循环引用的问题,及两个对象相互引用。所以JVM采用的使用下一种方法

  ②可达性分析法,从一组称为GCRoot的对象开始,依次向下寻找引用的对象,能寻找到的对象均视为可达,最后仍然为不可达的对象就被视为垃圾。

8.垃圾回收的方式有哪些

  常见的垃圾回收方式有以下四种:

  ①标记-清除,通过可达性分析算法进行标记,没有被标记到的视为垃圾,并一起进行垃圾回收。这样的坏处在于会产生大量的内存碎片。

  ②复制,内存只使用一半,回收时将存活的对象复制到另一半的内存中,同时清除掉这一半所有的对象。这样的坏处在于内存的利用率太低。

  ③标记-整理,标记与前面所说相同,标记完成后,将没有标记到的垃圾对象移到内存的一侧,一起清除,这样就不会产生内存碎片。

  ④分代回收:按照存活时间将对象分为新生代和老年代(根据经历GC回收的次数,一般是经过15次后变为老年代),对它们采用不同的回收方式,如JDK1.8就是对于新生代采用复制,对老年代采用标记整理。

9.常见的垃圾回收器有哪些

     JDK 8: Parallel Scavenge(新生代)+ Parallel Old(老年代)

      JDK 9 ~ JDK22: G1

 ① Serial:最早版本,串行执行,新生代采用标记-复制算法,老年代采用标记-整理算法

 ② ParNew:是Serial的多线程版本。

 ③ Parallel Scavenge: ParNew的优化版本,提供了很多参数供用户找到最合适的停顿时间或最大吞吐量。 

 ④ Parallel Old:Parallel Scavenge 收集器的老年代版本。使用多线程和“标记-整理”算法。

 ⑤ CMS:针对老年代是一种以获取最短回收停顿时间为目标的收集器,使用的方法是标记-清除。

 ⑥G1:G1 (Garbage-First) 是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器.,以极高概率满足 GC 停顿时间要求的同时,还具备高吞吐量性能特征。回收方法采用标记整理,包括:初始标记,并发标记,最终标记,筛选回收。

10.G1与CMS的对比

  ①:CMS只针对于老年代,G1收集范围是老年代和新生代。

  ②:CMS收集器是使用“标记-清除”算法进行的垃圾回收,容易产生内存碎片,G1使用的是标记-整理,不会产生内存碎片。

  ③ :G1可预测停顿,建立可预测的停顿时间模型。

  ④:G1 能充分利用 CPU、多核环境下的硬件优势,使用多个CPU工作来缩短停顿时间。

11.内存泄漏和内存溢出分别是什么

  内存泄漏指程序在运行过程中,不再使用的对象仍然被引用,因此也无法被GC回收掉的情况,最终会导致程序的性能下降。

  常见的内存泄漏的情况有:使用静态集合(ArrayList、HashMap)存储对象,因为只要类被加载静态集合就存在;未取消对事件源的监听;未停止的线程可能持有对象引用。

  内存溢出指程序在申请内存时所需要的内存过大,无法申请成功的情形

  常见原因:深度递归、死循环会导致栈溢出;程序中不断创建大量对象,超出JVM堆的限制;一些大型的数据结构一直引用对象,无法被回收。

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

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

相关文章

小新Pro 14 AHP9 2024款(83D3)原装oem预装系统Win11恢复安装包下载

适用品牌机型 :LENOVO联想【83D3】 链接:https://pan.baidu.com/s/10RAxNdvYPWJ21b_4--Y7Xw?pwdo5ju 提取码:o5ju 联想原装出厂Windows11系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office365办公软…

【论文笔记】Towards Privacy-Aware Sign Language Translation at Scale

🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: Towards Privacy-Aware Si…

Spring:bean的配置

对于bean的配置中,主要会讲解bean基础配置,bean的别名配置,bean的作用范围配置(重点),这三部分内容: bean基础配置 id与class配置 bean的name属性 bean的别名配置 bean作用范围scope配置 scope使用后续思考 介绍完scope属性以后,我们…

贴代码框架PasteForm特性介绍之markdown和richtext

简介 PasteForm是贴代码推出的 “新一代CRUD” ,基于ABPvNext,目的是通过对Dto的特性的标注,从而实现管理端的统一UI,借助于配套的PasteBuilder代码生成器,你可以快速的为自己的项目构建后台管理端!目前管…

【RK3588 Linux 5.x 内核编程】-内核中的链表(Linked List)及使用

内核中的链表(Linked List)及使用 文章目录 内核中的链表(Linked List)及使用1、Linked List介绍2、Linux内核中的链表3、链表的操作3.1链表初始化3.2 创建节点3.3 添加节点3.4 删除节点3.5 替换节点3.6 移动节点3.7 链表旋转3.8 链表检测3.9 链表分割与合并3.10 链表遍历4、驱…

永夜星河主题特效2(星河背景 + 闪烁文字+点击星星 + 文字弹出特效)

目录 图片展示 星河背景 闪烁文字点击星星 文字弹出特效 特效介绍&#xff1a; 使用方式&#xff1a; 图片展示 星河背景 闪烁文字点击星星 文字弹出特效 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8">&l…

通过JS实现下载图片到本地教程分享

今天分享的这个方法我之前自己试了一下&#xff0c;感觉还行&#xff0c;原理就是通过<a>标签的新增属性实现的&#xff0c;然后可以强制触发下载功能&#xff0c;废话不多说&#xff0c;直接上教程。 首先在HTML写下面的代码: <a href"img.jpg" download…

Harmony错题本--@Preview标注上依然无法预览

初学HarmonyOs开发&#xff0c;写了一个超级简单的组件&#xff0c;但是代码上没有什么问题&#xff0c;DevEco Studio却无法完成预览 代码如下&#xff1a; // 单纯的右键-> ArkTsFile的话&#xff0c;可以创建一个组件。 // 原因是&#xff0c;之前我们学过通过右键->…

【linux学习指南】VSCode部署Ubantu云服务器,与Xshell进行本地通信文件编写

文章目录 &#x1f4dd;前言&#x1f320; 步骤&#x1f309;测试同步 &#x1f6a9;总结 &#x1f4dd;前言 本文目的是讲使用Vscode连接Ubantu,与本地Xshell建立通信同步文件编写。 查看本机系统相关信息&#xff1a; cat /etc/lsb*DISTRIB_IDUbuntu: 表示这是 Ubuntu 发行…

ES-针对某个字段去重后-获取某个字段值的所有值

针对上面表的数据&#xff0c;现在想根据age分组&#xff0c;并获取每个分组后的name有哪些(去重后)。 select age, GROUP_CONCAT(DISTINCT(name)) from testtable group by age ; 结果&#xff1a; 如果想要增加排序&#xff1a; SELECT age, GROUP_CONCAT(DISTINCT name)…

基于java+SpringBoot+Vue的在线考试系统设计与实现

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven mysql5.7或8.0等等组成&#x…

一文详细深入总结服务器选型

1. 题记&#xff1a; 服务器选型工作是项目规划检讨的一项非常重要的工作&#xff0c;本文详细深入总结服务器选型。 2. 服务器基础知识概览 2.1 服务器的定义与功能 2.1 .1 定义 服务器是一种高性能计算机&#xff0c;其设计目的是在网络中提供服务。它可以处理来自多个客…

Linux 入门——基本指令1

目录 一背景知识的简介 二 入门相关指令的使用 一.背景知识的简介 1.认识 Linux &#xff0c;了解Linux 的相关背景 其实Linux 是从 Unix 发展而来的。 Linux&#xff0c;一般指GNU/Linux&#xff08;单独的Linux内核并不可直接使用&#xff0c;一般搭配GNU套件&#xff0…

2024年数维杯国际赛赛题浅析-助攻快速选题

本届数维杯我们将选择 MCM的B题以及ICM的D题进行助攻&#xff0c;具体助攻时间轴如下所示 11.15 12&#xff1a;00 更新赛题翻译、相关文献资料、选题建议、赛题难度 11.15 16&#xff1a;00 更新人工精翻版本赛题、数据预处理代码 11.15 24&#xff1a;00 更新完整解题思路…

w038基于SpringBoot的网上租赁系统设计与实现

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0…

windows 安装Ubuntu 后如何使用

windows 安装Ubuntu 后如何使用 youtube链接 https://www.youtube.com/watch?vPaEcQmgEz78哔哩哔哩视频 https://www.bilibili.com/video/BV1tW42197za/?spm_id_from333.999.0.0两个视频是一样的安装Ubuntu 安装docker的教程&#xff0c;不执行docker的安装即可 安装完毕后…

HashMap面试知识点

一、HashMap实现原理 JDK1.7之前&#xff1a;HashMap由数组链表组成。 JDK1.8之后&#xff1a;HashMap由数组链表、红黑树组成&#xff0c;当链表长度超过8&#xff0c;且 二、HashMap中put()方法的过程 ①首先检查数组table是否为空&#xff0c; 为空的话通过resize()方法进…

OceanBase 闪回查询

前言 在OB中&#xff0c;drop表可以通过 回收站 或者 以往的备份恢复来还原单表。当delete数据时&#xff0c;由于delete操作的对象不会进入回收站&#xff0c;此时需要通过闪回查询功能查看delete的数据&#xff0c;以便后续恢复 本次实验版本为 OceanBase 4.2.1.8&#xff0…

[A-18]ARMv8/ARMv9-Memory-内存空间的属性(Attributes Properties)

ver0.1 [看前序文章有惊喜,关注“浩瀚架构师”,可以解锁全部文章] 前言 在宏伟的ARM的内存世界中VMSA中,属性这个议题算不上最亮的星,就和屏幕前的你和我一样,平凡的活在这个茫茫然的人世间。纵使“丈夫贫践应未足,今日相逢无酒钱。”,也不要灰心面对生活,因为“山重…

【Linux】--环境变量

大家好呀&#xff0c;我是残念&#xff0c;希望在你看完之后&#xff0c;能对你有所帮助&#xff0c;有什么不足请指正&#xff01;共同学习交流哦 本文由&#xff1a;残念ing原创CSDN首发&#xff0c;如需要转载请通知 个人主页&#xff1a;残念ing-CSDN博客&#xff0c;欢迎各…