整个jvm已经于本年度二月初完结,这里是对一些基本知识的复盘
参考了学习微博:https://nyimac.gitee.io/2020/07/03/JVM%E5%AD%A6%E4%B9%A0/
总结(大约半个小时过一遍)
-
了解jvm,jre,jdk的区别
-
知道jvm的整体架构(内存结构包含哪些?执行引擎包含哪些?都有什么特点),内存结构
-
知道一些对堆内存进行诊断的指令jps,jmap,jconsole,jvirsalvm
-
知道1.8之前常量池的区别
-
知道运行时常量池
-
知道下列代码创建时字符串池的变化
-
知道常量池的优点:避免重复创建对象,大大节省空间
-
了解intern方法:第一点是返回的是串池的值。第二点是要知道1.8之前放入串池还要在堆中复制一份,而1.8之后则是不再复制。
-
了解直接内存的好处,以及如何实现申请缓存与释放缓存,见:https://nyimac.gitee.io/2020/07/03/JVM%E5%AD%A6%E4%B9%A0/#%E9%87%8A%E6%94%BE%E5%8E%9F%E7%90%86
-
了解两种常见的判断是否可回收的算法,以及他们的特点。知道gc root的对象有哪些?
-
知道五种引用:强软弱虚终(箭头的出发点是左值)
-
知道回收时,引用类本身不会被回收,要用引用队列
-
知道虚引用的一个实例时bytebuffer的回收clean(直接内存),终结器引用就是本地方法finalize
-
知道三种垃圾回收算法:标记清除,标记整理,复制(两倍内存)下面是复制方法的演示
-
了解分代回收,minor GC,full GC,STW发生时机:https://nyimac.gitee.io/2020/07/03/JVM%E5%AD%A6%E4%B9%A0/#3%E3%80%81%E5%88%86%E4%BB%A3%E5%9B%9E%E6%94%B6
-
知道内存的一些机制
-
知道三种常见的垃圾内存处理器:serial,cms,g1https://nyimac.gitee.io/2020/07/03/JVM%E5%AD%A6%E4%B9%A0/#4%E3%80%81%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6%E5%99%A8
-
知道类加载字节码当中(stack=2,locals=4)的含义
-
当new 一个对象时其实创建了两个对象到stack当中
-
finally 中的代码被复制了 3 份,分别放入 try 流程,catch 流程以及 catch剩余的异常类型流程
-
对类的访问仅仅只有访问类的 static final 静态常量(基本类型和字符串)才不会导致类的初始化,此外子类访问父类的静态变量,只会触发父类的初始化
-
所谓类加载器就是通过一个类的全限定名来获取描述该类的二进制字节流
-
双亲委派模式,即调用类加载器ClassLoader 的 loadClass 方法时,查找类的规则:询问上级加载了此类吗?没有那么我就可以加载。
-
类与类加载器的重要关系
-
解释器与JIT的区别,主要是jit有个缓存
-
逃逸分析
-
运行期优化:方法内联