JVM 是小白 Java 程序员成长路上的一道坎,学习JVM之前,只需要知道代码编译成 Class,虚拟机加载 Class 运行就可以了,学习 JVM 之后,可以深入理解代码从编译到加载的过程、内存中对象的创建与垃圾回收、日常开发中快速定位性能问题等,当然也是面试不可缺少的加分项,面对阿里等一线大企业的面试中也是必问之一!
JVM内存区域常见问题
- Java 内存分配?
- Java 堆的结构是什么样子的?
- 什么是堆中的永久代(Perm Gen space)?
- 简述各个版本内存区域的变化?
- 说说各个区域的作用?
- Java 中会存在内存泄漏吗,简述一下?
JVM的执行子系统常见问题
- Java 类加载过程?
- 描述一下 JVM 加载 Class 文件的原理机制?
- 什么是类加载器?
- 类加载器有哪些?
- 什么是tomcat类加载机制?
- 类加载器双亲委派模型机制?
垃圾回收常见问题
- 什么是GC? 为什么要有 GC?
- 简述一下Java 垃圾回收机制?
- 如何判断一个对象是否存活?
- 垃圾回收的优点和原理,并考虑 2 种回收机制?
- 垃圾回收器的基本原理是什么?
- 垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
- 深拷贝和浅拷贝?
- System.gc() 和 Runtime.gc() 会做些什么?
- 如果对象的引用被置为 null,垃圾收集器是否会立即释放对象占用的内存?
- 什么是分布式垃圾回收(DGC)?它是如何工作的?
- 串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?
- 在 Java 中,对象什么时候可以被垃圾回收?
- 简述Minor GC 和 Major GC?
- JVM 的永久代中会发生垃圾回收么?
- Java 中垃圾收集的方法有哪些?
性能优化常见问题
- 讲讲你理解的性能评价及测试指标?
- 常用的性能优化方式有哪些?
- 说说分布式缓存和一致性哈希?
- 同步与异步?阻塞与非阻塞?
- 什么是GC调优?
- 常见异步的手段有哪些?
如何正确系统的学习JVM和性能调优?
所谓系统学习法,是指把所学内容当成是一个系统看待,力求从大方向出发指导学习,这样,在学习和复习的时候不是按部就班按章节行进,而是先模糊概括,再逐渐在大框架下逐步明晰细节、完善结构、针对缺陷和不足专攻的学习方法。区分一个程序猿技术水平和视野的一个重要指标是性能优化,所以面试时,面试官总会问你一个问题,如何进行性能优化呢?
Java内存区域
- 运行时数据区域(程序计数器、堆、栈等)
- 站在线程角度来看堆和栈
- 深入辨析堆和栈
- 方法的出入栈
- 虚拟机中的对象
- 堆参数设置和内存溢出实战
垃圾回收器和内存分配策略
- 判断对象的存活
- 辨析强、弱等各种引用
- GC算法
- 分代收集
- Stop The World现象
- GC日志解读
- 内存分配与回收策略,内存泄漏和内存溢出辨析
- JDK为我们提供的工具
- 了解MAT
- 垃圾回收器
深入了解性能优化
- 常用的性能评价/测试指标
- 常用的性能优化手段
- 详细了解应用服务性能优化
编写高效优雅Java程序
JVM的执行子系统
- Class类文件本质,Class文件格式
- 字节码指令
- 类加载机制
- 栈桢详解
- 方法调用详解
- 基于栈的字节码解释执行引擎
如果看到这时你的头脑还是一片空白,或是靠死记硬背还是靠着之前的经历,答一下压缩代码,打包代码,事件代理,这说明你对性能优化还是缺乏一个整体,系统的掌握,对性能优化还只是处于听说过一个方法就加上去的阶段。这样也就无从去更好的优化性能。在这分享一个系统学习JVM及性能调优的学习导图并且在文末附Xmind文件笔记免费分享!(建议收藏)
最后
针对于上面的JVM面试题我总结出了答案及一些JVM性能调优的架构视频资料和互联网公司java程序员面试涉及到的绝大部分面试题及答案做成了文档和架构视频资料免费分享给大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料),希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。
需要学习的小伙伴可以前往公众号