1.1 什么是jvm
定义:
好处:
-
一次编写,到处运行。
-
自动内存管理,垃圾回收功能(大大减轻程序员负担)
-
数组下标越界检查(如果我们数组越界了,很有可能覆盖其他代码的内存,很严重的)
-
多态(jvm内部使用虚方法表来实现)
比较:
jvm jre jdk
jre = jvm + 基础类库(我们平时开发用的java.lang.* ,集合类,io类。。。)
JDK=jvm + 基础类库+编译工具(javac,javap,内存检测工具)
1.2 学习jvm有什么用
-
面试
-
理解底层的实现原理
-
中高级程序员的必备技能
1.3 常见的jvm
jvm是一个规范。你只要遵循这个规范,你甚至可以自己去开发一个jvm的实现。
1.4 学习路线
jvm可以分为这么几大块
-
类加载器
-
内存结构
-
执行引擎
我们的java源代码编译为java二进制字节码之后,他必须经过类加载器才能被加载到jvm内存里去运行。类都是放在方法区的部分,类将来创建的实例对象是放在堆的部分。而堆里面的这些对象在调用方法时又会用到虚拟机栈和程序计数器以及本地方法栈。方法执行时,每行代码是由执行引擎中的解释器逐行进行。方法里的一些热点代码,也就是被频繁调用的代码,会由即时编译器来编译,你可以理解为一个优化后的执行,执行引擎中还有一个很重要的模块GC模块。garbage collector ,会对堆里面一些不再被引用的对象进行回收。当然这里还有我们java代码不能实现的功能,必须调用底层实现的,和操作系统的一些功能打交道,就需要本地方法接口
第一部分我们学习内存,第二学习GC,第三学习类的字节码结构和编译前的优化,然后学习类加载器。