JVM (一)JVM概述

222 阅读2分钟

目录

1.JVM的作用

JVM的作用是为了屏蔽计算机硬件的差异,java源代码通过编译,产生.class字节码文件,不同平台的虚拟机将字节码文件编译成机器能够识别的机器码指令,有了jvm的存在,程序员就不必担心代码对不同平台的适配性问题了.

2.虚拟机的构成

image-20201102192742094

  • 类装载子系统:负责将.class文件加载进内存

  • 运行时数据区

    • 方法区和堆区:被所用线程所共享
    • 方法区(jdk7:永久代,jdk8:元空间):用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器(JIT编译器,英文写作Just-In-Time Compiler)编译后的代码等数据。
    • 堆区:Java 虚拟机中内存最大的一块,是被所有线程共享的,几乎所有的对象实例都在这里分配内存;
    • 程序计数器:当前线程所执行的字节码的行号指示器,字节码解析器的工作是通过改变这个计数器的值,来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能,都需要依赖这个计数器来完成;
    • Java 虚拟机栈(Java Virtual Machine Stacks):线程单独持有,用于存储局部变量表、操作数栈、动态链接、方法出口等信息;
    • 本地方法栈(Native Method Stack):与虚拟机栈的作用是一样的,只不过虚拟机栈是服务 Java 方法的,而本地方法栈是为虚拟机调用 Native 方法服务的;
  • 执行引擎:执行引擎的任务就是根据程序计数器的指向将字节码指令解释/编译为对应平台上的本地机器指令才可以。简单来说,JVM中的执行引擎充当了将高级语言翻译为机器语言的译者.

  • 本地方法接口:java调用非java代码的接口

3.java代码的执行流程

java源程序--编译javac-->字节码文件.class-->类装载子系统生成反射类(存入方法区)--->运行时数据区(五大块儿)--->执行引擎-->解释执行+编译执行(JIT)-->操作系统(Win,Linux,Mac JVM)

参考文章:www.cnblogs.com/yanl55555/c…