首先,熟悉一下jvm(Java Virtual Machine(Java虚拟机))到底是个啥东西。
Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。这个一个官方的解释,只要理解一点啥叫不同平台就好了,windows是一个平台,苹果也是一个平台,当然还有其他linux系统。
接下来要了解的是Java虚拟机主要分为五大模块:类装载器子系统、运行时数据区、执行引擎、本地方法接口和垃圾收集模块。然而这个几个模块中最终的两个部分是运行时数据区,还垃圾收集模块。
Java体系结构图
1.类加载模块 :重点双亲委派,和线程上下文类加载器
2.运行时数据区:jvm内存模型(方法栈,堆(永久代在1.8之后独立出来一个元数据区),虚拟机栈,本地方法栈,程序计数器)
jvm运行时数据区
3.执行引擎: 字节码解释器,模板解释器以及JIT即时编译器
4.本地方法接口:JNI(Java Native Interface)在定义一个native method时,并不提供实现体(有些像定义一个Java interface),因为其实现体是由非java语言在外面实现的。
5.垃圾回收机制: