JVM 是Java 程序员成长路上的一道坎,学习JVM之前,只需要知道代码编译成 Class,虚拟机加载 Class 运行就可以了,学习 JVM 之后,可以深入理解代码从编译到加载的过程、内存中对象的创建与垃圾回收、日常开发中快速定位性能问题等,当然也是面试不可缺少的加分项。
相信各位在面试的时候有不少人让JVM给挡住了offer,因为有前车之鉴,我在去面试前做好了充足的准备,网上大肆的搜集相关面试资料,自己整理,筛选出了面试期间出现频率最高的题目,在这里分享出来,希望能让各位看到的朋友避开那些坑,拿到心仪的offer!
对JVM这些面试题感兴趣的,或者是想更深入学习JVM的朋友,我在这里将这些文档分享出来
需要的朋友注意留意文末
一.Java 类加载过程?
Java 类加载需要经历一下 7 个过程:
1.加载
2.验证
3.准备
4.解析
5.初始化
6.使用
7.卸载
二.描述一下 JVM 加载 Class 文件的原理机制?
类加载的主要步骤:
1.装载。
2.链接。
3.检查。
4.准备。
5.解析。
6.初始化。
三.Java 内存分配
1.寄存器:我们无法控制
2.静态域:static定义的静态成员
3.常量池:编译是被确定并保存在 .class文件中的(final)常量值和一些文本修饰的符号引用(类和接口的全限定名,字段的名称和描述符,方法和名称和描述符)
4.非 RAM 存储:硬盘永久储存空间
5.堆内存:new创建的对象和数组,由java虚拟机自动垃圾回收器管理,存取速度慢
6.栈内存:基本类型的变量和对象的引用变量(堆内存空间的访问地址),速度快,可以共享,但是大小与生存期必须确定,缺乏灵活性。
四.GC 是什么? 为什么要有 GC
GC 是垃圾收集的意思(GabageCollection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java 提供的 GC 功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java 语言没有提供释放已分配内存的显示操作方法。
五. 简述 Java 垃圾回收机
在 Java 中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在 JVM 中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。
六. 如何判断一个对象是否存活?(或者 GC 对象的判定方法)
判断一个对象是否存活有两种方法:
引用计数法
可达性算法(引用链法)
七. 垃圾回收的优点和原理。并考虑 2 种回收
八. 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回
九. Java 中会存在内存泄漏吗,请简单描述
十. 深拷贝和浅拷贝
十一. System.gc() 和 Runtime.gc() 会做什么事情?
十二. finalize() 方法什么时候被调用?析构函数 (finalization) 的目的是什么?
十三. 如果对象的引用被置为 null,垃圾收集器是否会立即释放对象占用的内存?
十四. 什么是分布式垃圾回收(DGC)?它是如何工作的?
十五. 串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?
十六. 在 Java 中,对象什么时候可以被垃圾回收?
十七. 简述 Java 内存分配与回收策率以及 Minor GC 和 Major GC。
十八. JVM 的永久代中会发生垃圾回收么?
十九. Java 中垃圾收集的方法有哪些?
二十. 什么是类加载器,类加载器有哪些?
二十一. 类加载器双亲委派模型机制?
为了大家的金九银十冲刺,小编结合清华大佬,特意准备了一些Java架构资料,希望分享给有需要的朋友,学习技术内容包含有:Spring、Dubbo、MyBatis、RPC、源码分析,高并发、高性能、分布式、性能优化、微服务高级架构开发等等。
为了不影响大家的阅读体验,小编直接截取了部分截图,有需要深度了解学习的朋友,请关注小编,请私信回复【学习】即可哦。