什么是JVM?简单来说它就是一个运行Java代码的解释器,那大家应该都是有经验的Java开发人员了,想想为何要学习JVM?[面试??调优??装B??]其实啊,作为螺丝钉程序员,JVM差不多可能了解一下就行啦,不需要看懂内部的细节也照样可以写出优质的Java代码。但是呢,如果不深入学习,一到造火箭的时候(面试),不懂JVM的你岂不是会被虐到体无完肤?好吧,我就是一个血淋淋的例子,没有惨,只有更惨!
所以,万分感谢朋友送我的“高分JVM”秘籍(敲重点),感觉就像是走了个后门,赶紧迅速造起火箭来了!
先上一波面试高频题,测试一下自己水平(在先不看答案的情况下),然后再来看“高分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],这里截图看一部分的答案,更多“完整的解析以及后面的6份高分秘籍”可以直接来找小编免费给你分享)
“走后门”成功!万分感激腾讯大佬的手敲“高分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”秘籍
“走后门”成功!万分感激腾讯大佬的手敲“高分JVM”秘籍
高分JVM_5_内存模型
详情内容(部分)
高分JVM_6_调优(敲重点,源自:Java性能调优实战-JVM性能监测及调优)
看一张JVM调优的手绘学习路线图(可提供原件下载,见文末)...
Java性能调优实战-JVM性能监测及调优,详情目录如下,可以看见有哪几部分的内容...
- 磨刀不误砍柴工:欲知JVM调优先了解JVM内存模型
- 深入JVM即时编译器JIT,优化Java编译
- 如何优化垃圾回收机制?
- 如何优化JVM内存分配?
- 内存持续上升,我该如何排查问题?
内容详情(部分)
高分JVM_7_入门到入魔
内容解释(部分)
再BB几句
以上说了这么多,都是JVM必备必学的东西,7份高分JVM:面试+内存结构+垃圾回收+类加载与字节码技术+内存模型+JVM从入门到入魔全是我逆袭的秘籍!
BB这么多,我还想问一句,JVM到底该学习什么?其实说起来也就三点吧...
- 源码到类文件
- 类文件到JVM
- JVM各种折腾[内部结构、执行方式、垃圾回收、本地调用等]
- 看我手绘的深入Java虚拟机的学习路线,对比大纲,可以迅速回忆全部的知识
不论是我的7份高分JVM秘籍还是手绘的学习路线大纲,如果你想进阶迅速学习,可以直接来找小编给你免费分享一下便可!
不过小编有个小小的请求,想麻烦大家帮帮忙转发一下(可以让更多的人看见呢)
此外,更多关于Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构面试解析+知识点集合等等可以去这个Github链接地址:
https://github.com/ThinkingHan/Java-note 阅读,Star一下吧,感谢支持~