Jvm深入浅出



JVM

jdk、jre、jvm的关系

jDK:是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文件,并且解析为当前运行系统所对应的指令。

  1. Java程序的跨平台特性主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行,Java虚拟机中的Java解释器负责将字节码文件解释成为特定的机器码进行运行

  2. 粗略分来,JVM的内部体系结构分为三部分,分别是:类装载器(ClassLoader)子系统,运行时数据区,和执行引擎

JVM 的位置在哪里?

JVM整体结构

Java代码执行流程

JVM架构图

Jvm的生命周期

类加载器

类加载器子系统作用

类加载器ClassLoader

类装载子系统

  1. 通过一个类的全限定明获取定义此类的二进制字节流;

  2. 将这个字节流所代表的的静态存储结构转化为方法区的运行时数据;

  3. 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口

类加载器分类

  1. 引导类加载器BootStrapClassLoader、

  2. 自定义类加载器(Extension Class Loader、System Class Loader、User-Defined ClassLoader)

类的加载过程

1.加载

2.验证(Verify)

目的在于确保Class文件的字节流中包含信息符合当前虚拟机要求,保证被加载类的正确性,不会危害虚拟机自身安全。

主要包括四种验证,文件格式验证,源数据验证,字节码验证,符号引用验证

3.准备(Prepare)

  • 为类变量分配内存并且设置该类变量的默认初始值,即零值;
  • 这里不包含用final修饰的static,因为final在编译的时候就会分配了,准备阶段会显式初始化;(final修饰的是常量)
  • 这里不会为实例变量分配初始化,类变量会分配在方法去中,而实例变量是会随着对象一起分配到java堆中。

4.解析(Resolve)

将常量池内的符号引用转换为直接引用的过程。
事实上,解析操作网晚会伴随着jvm在执行完初始化之后再执行

5.初始化

打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  1. © 2020 Liu Yang    湘ICP备20003709号

请我喝杯咖啡吧~

支付宝
微信