常见面试2

ops/2025/1/11 18:42:51/

目录

1.AQS全称和组成部分有哪些?它的基本原理是什么?

2.类加载器的分类有哪些?并解释什么是双亲委派机制(一定要描述如何违背双亲委派和典型实现)

3.如何判断一个对象为垃圾对象? 哪些对象可以作为GCRoot集合中对象?

4.垃圾回收算法有哪些?(包含各自优缺点)


1.AQS全称和组成部分有哪些?它的基本原理是什么?

AbstractQueueSynchronizer 抽象队列同步器

组成 FIFO阻塞队列,int类型的state状态值

基本原理 子类需要重写锁被protected修饰的方法 用于修改state的值 来表示acquire上锁和release释放锁的流程, state=0 表示未上锁 state=1 表示上锁,并且没有重入, state>1 表示上锁 并且重入

2.类加载器的分类有哪些?并解释什么是双亲委派机制(一定要描述如何违背双亲委派和典型实现)

bootstrapClassLoader 根加载器 由c++实现 主要负责加载jdk中rt.jar包中信息

ExtClassLoader 扩展类加载器 java 实现 主要负责加载除了rt.jar 之外的其他jar包

AppClassLoader 应用类加载器 主要负责加载器导入的第三方jar包

自定义类加载器 用的级少 一旦要是自定义了类加载器 他就会违背双亲委派

类加载器(ClassLoader)不仅负责加载类的字节码文件,还要确保类的正确加载和防止类的重复加载。双亲委派机制通过一个层次结构的类加载器模型来实现这一点,确保了类的唯一性和安全性。

双亲委派机制 很少自定义类加载器,通常加载一个类到内存中一般只涉及系统提供三个类加载过程 ,从应用类加载开始加载 第一次加载不会真正的区加载 他将加载任务 委托给父类 扩展类加载器

扩展类加载器也有负责 扩展类加载也会将请求委托给根加载器 此时根加载器由于没有父类 他会加载tr.jar包中类信息 执行第一次加载

如果获取不到 则委派给他的子类 扩展类加载器 从jar包之外的其他jar包中加载类信息

如果扩展类加载器也无法加载 此时委派给应用类加载器从而导入的第三方jar包中完成类信息的加载过程

如果自定义的jar中也没有找到,说明该类不存在 抛出异常 classNotFoundException

自定义类继承 作为自定义类加载器 重写loadclass()方法 不让执行双亲委派机制逻辑 从而打破双亲委派的, spi机制是一种服务发现机制,它通过 classPath 路径下的META-INF/services 文件夹查找文件 自动加载文件里所定义的类 这一机制为很多框架扩展提供可能

具体实现 tomcat 自定义类继承 classloader 违背的

jdk spi机制导致双亲委派机制

3.如何判断一个对象为垃圾对象? 哪些对象可以作为GCRoot集合中对象?

不在被任何引用所使用的对象

不可达性 一个对象没有任何引用指向它 或者只能通过已被垃圾收集器标记为 可被回收的对象才能到达它,那么这个对象就是不可达的 ,被视为垃圾

虚拟机栈中的局部变量,当前正在执行的方法内的局部变量表中的对象引用

本地方法栈中的对象:本地方法中JNI引用的对象。

方法区中的静态字段:类静态属性所引用的对象

4.垃圾回收算法有哪些?(包含各自优缺点)

标记清除算法 优点:简单异实现 ,可以有效的回收大量的无用对象

缺点:标记和清除两个过程都会导致系统暂停,影响应用性能,

连续回收后会导致内存空间零散,难以分配大对象

复制算法 优点: 每次都是对一块区域进行操作,清理过后是整块的内存区域,只需要处理存活对象,不用遍历所有对象,只需要处理存活对象,不用遍历所有对象

缺点 需要两倍的内存空间 适用于新生代,尤其是Eden区和Survivor区之间的复制

分代收集算法 优点: 新创建的对象放在新生代,频繁回收,减少垃圾收集对老年代的影响, 结合使用 新生代使用复制算法,老年代使用标记-整理算法

缺点: 需要维护多个区域的划分和转移逻辑


http://www.ppmy.cn/ops/108894.html

相关文章

docker 简易入门

# docker 简易入门 docker由几个组成部分 docker client: 即 docker 命令行工具 docker host: 宿主机,docker daemon 的运行环境服务器 docker daemon: docker 的守护进程,docker client 通过命令行与 docker daemon 交互 container: 最小型的一个操…

1-21 角点检测 opencv树莓派4B 入门系列笔记

目录 一、提前准备 二、代码详解 三、运行现象 四、完整工程贴出 一、提前准备 1、树莓派4B 及 64位系统 2、提前安装opencv库 以及 numpy库 3、保存一张图片 二、代码详解 import cv2img cv2.imread(jihe.jpg) # 角点检测需要转换为灰度图 img_gray cv2.cvtColor(img, c…

《JavaEE进阶》----11.<SpringIOCDI【Spring容器+IOC详解+DI介绍】>

本篇博客会详细讲解什么是Spring。 SpringIOC SpringID 五个类注解:Controller、Service、Repository、Component、Configuration 一个方法注解:Bean 什么是Spring IOC容器 Spring 是包含众多工具的IOC容器。能装东西的容器。 1.容器 如我们之前学的 Tom…

Super Image 2.1.0 图像处理软件,修复老照片、无损放大、智能修复,本地处理保护隐私

1.一款开源免费、功能强大的图像处理软件 2.支持修复老照片、增大图片尺寸、智能修复等 3.本地处理,无需担心隐私问题 链接:https://pan.quark.cn/s/891ef24f337b 📁大小:163M 🏷标签:#Super Image #图像…

笔记整理—内核!启动!—kernel部分(4)将内核代码分为3个部分

我们可以将内核代码分为3个部分:1.arch是cpu架构相关的部分。2.drivers是硬件驱动部分。3,别的部分,主要进行硬件弱相关或无相关的内容。 arch文件夹中的主要内容: mach (machine architecture)机器架构相关文件arch/arm中的mach…

【计算机网络】电路交换、报文交换和分组交换——三种交换方式性能分析以及计算机网络的分类

【计算机网络】电路交换、电报交换、分组交换 目录 【计算机网络】电路交换、电报交换、分组交换1. 电路交换2. 电报交换3. 分组交换4. 基于分组交换~“虚电路交换”技术 【计算机网络】电路交换、报文交换和分组交换——三种交换方式性能分析电路交换性能分析报文交换性能分析…

【C#生态园】提升性能效率:C#异步I/O库详尽比较和应用指南

优化异步任务处理:C#异步I/O库全面解析 前言 在C#开发中,异步I/O是一个重要的主题。为了提高性能和响应速度,开发人员需要深入了解各种异步I/O库的功能和用法。本文将介绍几个常用的C#异步I/O库,包括Task Parallel Library、Asy…

ffmpeg安装测试(支持cuda支持SRT)

文章目录 背景安装ffmpeg直接下载可执行文件选择版本选择对应系统版本下载测试Linux下安装 查看支持协议以及编码格式 常见错误缺少 libmvec.so.1LD_LIBRARY_PATH 错误 GPU加速测试SRT服务器搭建下载srs5.0源码解压安装配置启动 SRT推流测试SRT播放测试 背景 在音视频开发测试中…