JVM
jdk、jre、jvm的关系
DK:是Java开发工具包,是Sun Microsystems针对Java开发员的产品。
JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。
JRE:是java程序的运行环境,它包含JVM。
三者的关系:JDK(JRE(JVM))
什么是JVM
可以简单的理解为:就是运行编译好的java文件生成 的.class文件,并且解析为当前运行系统所对应的指令。
-
Java程序的跨平台特性主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行,Java虚拟机中的Java解释器负责将字节码文件解释成为特定的机器码进行运行,
-
粗略分来,JVM的内部体系结构分为三部分,分别是:类装载器(ClassLoader)子系统,运行时数据区,和执行引擎。
JVM 的位置在哪里?
JVM整体结构
Java代码执行流程
JVM架构图
Jvm的生命周期
类加载器子系统作用
类加载器ClassL
oader角色
类装载子系统
-
通过一个类的全限定明获取定义此类的二进制字节流;
-
将这个字节流所代表的的静态存储结构转化为方法区的运行时数据;
-
在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口
类加载器分类
-
引导类加载器BootStrapClassLoader、
-
自定义类加载器(Extension Class Loader、System Class Loader、User-Defined ClassLoader)
-
系统类System Class Loader加载器
链接模块
1.验证(Verify)
目的在于确保Class文件的字节流中包含信息符合当前虚拟机要求,保证被加载类的正确性,不会危害虚拟机自身安全。
主要包括四种验证,文件格式验证,源数据验证,字节码验证,符号引用验证。
2.准备(Prepare)
为类变量分配内存并且设置该类变量的默认初始值,即零值;
这里不包含用final修饰的static,因为final在编译的时候就会分配了,准备阶段会显式初始化;
之类不会为实例变量分配初始化,类变量会分配在方法去中,而实例变量是会随着对象一起分配到java堆中。
3.解析(Resolve)
将常量池内的符号引用转换为直接引用的过程。
事实上,解析操作网晚会伴随着jvm在执行完初始化之后再执行