JVM的重要性

很多人对于为什么要学JVM这个问题,他们的答案都是:因为面试。无论什么级别的Java从业者,JVM都是进阶时必须迈过的坎。不管是工作还是面试中,JVM都是必考题。如果不懂JVM的话,薪酬会非常吃亏。其实学习JVM并不仅仅可以用于面试,而在于更深入地理解 Java 这门语言,以及为未来排查线上问题打下基础。

JVM的优势

想要告别增删改查和简单开发,而是去做Java性能分析和调优工作,那么JVM绝对是一把助力的利剑。对于Java开发者而言,只有熟悉底层虚拟机的运行机制,才能通过JVM日志深入到字节码的层次去分析排查问题,发现隐性的系统缺陷,进而提升系统性能。
学习JVM的原因,本质是让你了解Java程序是如何被执行且优化的。这样一来,你才可以从内部入手,达到高效编程的目的。同时,你也可以为学习更深层、更核心的Java技术打好基础,且对于面试JVM时阿里是100%必问常问的高频点之一。

于是,小编整理了一套“高分JVM”秘籍(敲重点-点此查看),供大家学习参考!
先上一波面试高频题,测试一下自己水平(在先不看答案的情况下),答不上就跟我老老实实的一起学习呗~

高分JVM_1_面试高频点77个,测试一下?

  • 1、java中会存在内存泄漏吗,请简单描述。
  • 2、64 位 JVM 中,int 的长度是多数?
  • 3、Serial 与 Parallel GC 之间的不同之处?
  • 4、32 位和 64 位的 JVM,int 类型变量的长度是多数?
  • 5、Java 中 WeakReference 与 SoftReference 的区别?
  • 6、JVM 选项 -XX:+UseCompressedOops 有什么作用?为什么要使用?
  • 7、怎样通过 Java 程序来判断 JVM 是 32 位 还是 64位?
  • 8、32 位 JVM 和 64 位 JVM 的最大堆内存分别是多数?
  • 9、JRE、JDK、JVM 及 JIT 之间有什么不同?
  • 10、解释 Java 堆空间及 GC?
  • 11、JVM 内存区域
  • 12、程序计数器(线程私有)
  • 13、虚拟机栈(线程私有)
  • 14、本地方法区(线程私有)
  • 15、你能保证 GC 执行吗?
  • 16、怎么获取 Java 程序使用的内存?堆使用的百分比?
  • 17、Java 中堆和栈有什么区别?
  • 18、描述一下 JVM 加载 class 文件的原理机制
  • 19、GC 是什么?为什么要有 GC?
  • 20、堆(Heap-线程共享) -运行时数据区
  • 21、方法区/永久代(线程共享)
  • 22、JVM 运行时内存
  • 23、新生代
  • 24、老年代
  • 25、永久代
  • 26、JAVA8 与元数据
  • 27、引用计数法
  • 28、可达性分析
  • 29、标记清除算法( Mark-Sweep)
  • 30、复制算法(copying)
  • 31、标记整理算法(Mark-Compact)
  • 32、分代收集算法
  • 33、新生代与复制算法
  • 34、老年代与标记复制算法
  • 35、JAVA 强引用
  • 36、JAVA软引用
  • 37、JAVA弱引用
  • 38、JAVA虚引用
  • 39、分代收集算法
  • 40、在新生代-复制算法
  • 41、在老年代-标记整理算法
  • 42、分区收集算法
  • 43、GC 垃圾收集器
  • 44、Serial 垃圾收集器(单线程、 复制算法)
  • 45、ParNew 垃圾收集器(Serial+多线程)
  • 46、Parallel Scavenge 收集器(多线程复制算法、高效)
  • 47、Serial Old 收集器(单线程标记整理算法 )
  • 48、Parallel Old 收集器(多线程标记整理算法)
  • 59、CMS 收集器(多线程标记清除算法)
  • 50、G1 收集器
  • 51、JVM 类加载机制
  • 52、类加载器
  • 53、双亲委派
  • 54、OSGI( 动态模型系统)
  • 55、动态改变构造
  • 56、模块化编程与热插拔
  • 57、JVM内存模型
  • 58、栈
  • 59、本地方法栈
  • 60、程序计数器
  • 61、堆
  • 62、方法区
  • 63、分代回收
  • 64、堆和栈的区别
  • 65、什么时候会触发FullGC
  • 66、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
  • 67、对象分配规则
  • 68、描述一下JVM加载class文件的原理机制?
  • 69、Java对象创建过程
  • 70、简述Java的对象结构
  • 71、如何判断对象可以被回收
  • 72、JVM的永久代中会发生垃圾回收么
  • 73、垃圾收集算法
  • 74、调优命令有哪些?
  • 75、调优工具
  • 76、Minor GC与Full GC分别在什么时候发生?
  • 77、你知道哪些JVM性能调优?
答案有点多(源自[Java25大面试专题-JVM])



高分JVM_2_内存结构(程序计数器+虚拟机栈+本地方法栈+堆+方法区)

1. 程序计数器
  • 1.1 定义
  • 1.2 作用

2. 虚拟机栈
  • 2.1 定义
  • 2.2 栈内存溢出
  • 2.3 线程运行诊断

3. 本地方法栈
4. 堆
  • 4.1 定义
  • 4.2 堆内存溢出
  • 4.3 堆内存诊断

5. 方法区
  • 5.1 定义
  • 5.2 组成
  • 5.3 方法区内存溢出
  • 5.4 运行时常量池
  • 5.5 StringTable
  • 5.5 StringTable 特性
  • 5.6 StringTable 位置
  • 5.7 StringTable 垃圾回收
  • 5.8 StringTable 性能调优

6. 直接内存
  • 6.1 定义
  • 6.2 分配和回收原理

高分JVM_3_垃圾回收


1. 如何判断对象可以回收
  • 1.1 引用计数法
  • 1.2 可达性分析算法
  • 1.3 四种引用
2. 垃圾回收算法
  • 2.1 标记清除
  • 2.2 标记整理
  • 2.3 复制
3. 分代垃圾回收
  • 3.1 相关 VM 参数
4. 垃圾回收器
  • 4.1 串行
  • 4.2 吞吐量优先
  • 4.3 响应时间优先
  • 4.4 G1
5. 垃圾回收调优
  • 5.1 调优领域
  • 5.2 确定目标
  • 5.3 最快的 GC
  • 5.4 新生代调优
  • 5.5 老年代调优
  • 5.6 案例

高分JVM_4_类加载与字节码技术




高分JVM_5_内存模型


详情内容(部分)


高分JVM_6_调优(敲重点,源自:Java性能调优实战-JVM性能监测及调优)

看一张JVM调优的手绘学习路线图(可提供原件下载)

Java性能调优实战-JVM性能监测及调优,详情目录如下,可以看见有哪几部分的内容...

“走后门”成功!万分感激腾讯大佬的手敲“高分JVM”秘籍
  • 磨刀不误砍柴工:欲知JVM调优先了解JVM内存模型
  • 深入JVM即时编译器JIT,优化Java编译
  • 如何优化垃圾回收机制?
  • 如何优化JVM内存分配?
  • 内存持续上升,我该如何排查问题?
内容详情(部分)



高分JVM_7_入门到入魔


内容解释(部分)







再BB几句

以上说了这么多,都是JVM必备必学的东西,7份高分JVM:面试+内存结构+垃圾回收+类加载与字节码技术+内存模型+JVM从入门到入魔全是我逆袭的秘籍!
BB这么多,我还想问一句,JVM到底该学习什么?其实说起来也就三点吧...
  • 源码到类文件
  • 类文件到JVM
  • JVM各种折腾[内部结构、执行方式、垃圾回收、本地调用等]
  • 看我手绘的深入Java虚拟机的学习路线,对比大纲,可以迅速回忆全部的知识


不论是我的7份高分JVM秘籍还是手绘的学习路线大纲,如果你想进阶迅速学习,可以一起分享