您的位置:首页 > 游戏 > 游戏 > 常见面试2

常见面试2

2024/11/19 2:29:50 来源:https://blog.csdn.net/chengxy145/article/details/141923281  浏览:    关键词:常见面试2

目录

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区之间的复制

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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com