1、什么是jvm?
1)、java virtual machine,即java虚拟主机,它是java程序的运行环境(也可以说它是java二进制字节码的运行环境)。
2)、jvm是java实现平台无关性的基石,java程序运行的时候,编译器会将java文件编译成平台无关的java字节码文件(.class),接下来对应平台JVM对字节码文件进行解释,翻译成对应平台匹配的机器指令并运行。
2、使用jvm的好处?
1)、一次编写,到处运行
2)、自动内存管理,垃圾回收机制
3)、数组下标越界检查
3、为什么要学习JVM?
1)、面试必备
2)、中高级程序员必备
3)、想要走得长远,就需要懂原理,比如:自动拆、装箱是怎么实现的?反射是怎么实现的?垃圾回收器是怎么回事等等。
4、JVM、Jre、jdk三者关系,如下图:
5、学习JVM路线
classLoader:java代码编译成二进制(.class)文件后,会经过classLoader(类加载器),这样才能加载到JVM中运行。
Method Area:方法区,类是放在方法区中的。
Heap:堆,类的实例对象,通过new关键字创建的对象都会被放在堆内存中
JVM Stacks:虚拟机栈,它是每个线程运行需要的内存空间。
PC Register:程序计数器,用于保存JVM中下一条所要执行的指令的地址。
Native Method Stacks:本地方法栈。一些带有native关键字的方法就是需要java去调用本地的C或C++方法,因为java有时候没法直接和操作系统底层交互,所以需要用到本地方法。
当类调用方法时,会用到JVM Stacks、PC Register、本地方法栈。
方法执行时的每行代码是由执行引起中的解释器逐行执行,方法中的热点代码频繁调用的方法,由JIT编译器优化后执行,GC会对堆中不用的对象进行回收。
需要和操作系统打交道就需要使用到本地方法接口。