2021年面试阿里字节,90%被问到的JVM面试题(附答案,java高级开发研发简历模板

本文详细介绍了JVM类加载的过程,包括加载、验证、准备、解析和初始化阶段。同时,讨论了类加载器的种类,如启动类加载器、扩展类加载器和系统类加载器。文章强调了双亲委派模型在类加载中的重要性及其目的,以及如何打破这种模型。此外,还探讨了不同类型的引用——强引用、软引用、弱引用和虚引用的特性。最后,简要概述了JVM内存区域、垃圾回收算法和垃圾收集器,包括分代收集和GC策略。
摘要由CSDN通过智能技术生成

虚拟机把描述类的数据加载到内存里面,并对数据进行校验、解析和初始化,最终变成可以被虚拟机直接使用的class对象;

八、类加载的过程?


主要分为以下几个过程:加载、验证、准备、解析、初始化;加载:加载分为三步:

1、通过类的全限定性类名获取该类的二进制流;

2、将该二进制流的静态存储结构转为方法区的运行时数据结构;

3、在堆中为该类生成一个class对象;

验证:验证该class文件中的字节流信息复合虚拟机的要求,不会威胁到jvm的安全;

准备:为class对象的静态变量分配内存,初始化其初始值;

解析:该阶段主要完成符号引用转化成直接引用;

初始化:到了初始化阶段,才开始执行类中定义的java代码;初始化阶段是调用类构造器的过程;

九、什么是类加载器,常见的类加载器有哪些?


类加载器是指:通过一个类的全限定性类名获取该类的二进制字节流叫做类加载器;类加载器分为以下四种:启动类加载器:用来加载java核心类库,无法被java程序直接引用;

![](https://img-blog.csdnimg.cn/9ebea594c8d84547888f7c5a1fecf720.png?x-oss-process=image/wat

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

浏览器打开:qq.cn.hn/FTf 免费领取

ermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5omL5oyB5Lik5oqK6ZSf5pak5ou3,size_20,color_FFFFFF,t_70,g_se,x_16)

扩展类加载器:用来加载java的扩展库,java的虚拟机实现会提供一个扩展库目录,该类加载器在扩展库目录里面查找并加载java类;

系统类加载器:它根据java的类路径来加载类,一般来说,java应用的类都是通过它来加载的;

自定义类加载器:由java语言实现,继承自ClassLoader;

十、什么是双亲委派模型?


当一个类加载器收到一个类加载的请求,他首先不会尝试自己去加载,而是将这个请求委派给父类加载器去加载,只有父类加载器在自己的搜索范围类查找不到给类时,子加载器才会尝试自己去加载该类;

十一、为什么需要双亲委派模型?


为了防止内存中出现多个相同的字节码;因为如果没有双亲委派的话,用户就可以自己定义一个java.lang.String类,那么就无法保证类的唯一性;

十二、怎么打破双亲委派模型?


自定义类加载器,继承ClassLoader类,重写loadClass方法和findClass方法;

十三、强引用、软应用、弱引用、虚引用的区别?


强引用:强引用是我们使用最广泛的引用,如果一个对象具有强引用,那么垃圾回收期绝对不会回收它,当内存空间不足时,垃圾回收器宁愿抛出OutOfMemoryError,也不会回收具有强引用的对象;我们可以通过显示的将强引用对象置为null,让gc认为该对象不存在引用,从而来回收它;

软引用:软应用是用来描述一些有用但不是必须的对象,在java中用SoftReference来表示,当一个对象只有软应用时,只有当内存不足时,才会回收它;软引用可以和引用队列联合使用,如果软引用所引用的对象被垃圾回收器所回收了,虚拟机会把这个软引用加入到与之对应的引用队列中;

弱引用:弱引用是用来描述一些可有可无的对象,在java中用WeakReference来表示,在垃圾回收时,一旦发现一个对象只具有软引用的时候,无论当前内存空间是否充足,都会回收掉该对象;弱引用可以和引用队列联合使用,如果弱引用所引用的对象被垃圾回收了,虚拟机会将该对象的引用加入到与之关联的引用队列中;

虚引用:虚引用就是一种可有可无的引用,无法用来表示对象的生命周期,任何时候都可能被回收,虚引用主要使用来跟踪对象被垃圾回收的活动,虚引用和软引用与弱引用的区别在于:虚引用必须和引用队列联合使用;在进行垃圾回收的时候,如果发现一个对象只有虚引用,那么就会将这个对象的引用加入到与之关联的引用队列中,程序可以通过发现一个引用队列中是否已经加入了虚引用,来了解被引用的对象是否需要被进行垃圾回收。

篇幅有限,我给大家准备了这份超详细JVM内存结构,读完之后相信碰到多数JVM面试都不怕,先展示部分截图:

一、线程

二、JVM内存区域

  • 程序计数器(线程私有)

  • 虚拟机栈(线程私有)

  • 本地方法区(线程私有)

  • 堆(Heap-线程共享)-运行时数据区

  • 方法区/永久代(线程共享)

三、JVM运行时内存

  • 新生代

  • 老年代

  • 永久代

四、垃圾回收与算法

  • 如何确定垃圾

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

  • 复制算法(copying)

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

  • 分代收集算法

五、java四种引用类型

  • 强引用

  • 软引用

  • 弱引用

  • 虚引用

六、GC分代收集算法VS分区收集算法

  • 分代收集算法

  • 分区收集算法

七、GC垃圾收集器

  • Serial垃圾收集器(单线程、复制算法)

  • ParNew垃圾收集器(Serial+多线程)

  • Parallel Scavenge收集器(多线程复制算法、高效)

  • Serial Old收集器(单线程标记整理算法)

  • Serial Old收集器(多线程标记整理算法)

  • CMS收集器(多线程标记整理算法)

  • G1收集器

八、JAVA IO/NIO

  • 阻塞IO模型

  • 非阻塞IO模型

  • 多路复用IO模型

  • 信号驱动IO模型

  • 异步IO模型

  • JAVA IO包

  • JAVA NIO

  • Channel

  • Buffer

  • Selector

九、JVM类加载机制

  • 加载
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值