自学内容网 自学内容网

JVM内存模型

1.什么是JVM?

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

  • jvm是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的。
  • jvm包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和一个存储方法域。
  • JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
  • JVM在执行字节码时,是把字节码解释为机器指令执行。

2.JDK\JRE\JVM

  • JDK:全称“Java Development Kit”Java开发工具包,提供javac编译器、jheap、jconsole等监控工具;
  • JRE:全称“Java Runtime Environment”Java运行环境,提供Class Library 核心类库 + JVM;
  • JVM:全称“Java Virtual Machine”Java虚拟机,用于运行Java应用程序;

3.java的执行过程?

  1. 编译:通过javac命令,调用JDK编译器,将*.java源文件编译成*.class字节码文件;
  2. 执行:通过java命令,调用JVM虚拟机执行*.class字节码文件;

4.Java程序为啥可以跨平台?

  • 相同的源代码在不同的平台编译的字节码是相同的,所以字节码文件可以在不同平台"通用";
  • 不同的平台在执行字节码时,都需要各自的jvm用于将字节码翻译成当前平台可以执行的机器码;

5.字节码

当1个Java源文件被编译后,就按照JVM规范和字节码定义,产生一个class字节码文件,文件内容由10个固定部分组成;

前4个字节非常特殊,红色框的cafe babe是詹姆斯定义的魔法数,它的作用是标志当前文件是一个字节码文件。剩余部分中的每个字节均代表一个字节码指令,由于每个指令的长度按照1个字节存储,所以每个指令被称为字节码(Bytecode),Java所有的字节码指令有200多个。

JVM在字节码指令的基础上设计了一套操作码助记符,使用特殊单词来代替对应的数字指令。
 

0x15 ILOAD:读取int类型的局部变量
0x36 ISTORE:保存int类型的局部变量
0x60 IADD:执行两个int类型的数值加法运算
0xbb NEW:创建对象
0xbc NEWARRAY:创建数组
0xac IRETURN:返回int类型结果

6.静态编译器

通过JDK提供的静态编译器,将Java源文件编译成字节码文件。

编译过程:

  1. 词法分析:通过空格分隔出源代码中的单词、操作符、控制符等信息,将其形成token信息流,传递给语法解析器。
  2. 语法分析:将token信息流按照Java语法规则,组装成一颗语法树
  3. 语义分析:对语法树进行关键字使用、类型匹配、作用域等语法检查。
  4. 字节码:当语义分析完成后,可以生成字节码。

7.JVM的执行方式

Jvm的执行方式是解释+编译的混合模式,以解释为主编译为辅的方式;

  1. 解释:在执行过程中,JVM将字节码中的每个指令通过解释器转化为机器码,交给cpu执行;
  2. 编译:JVM在运行期间,JVM通过热点代码统计分析识别高频的方法调用,当超过阈值时,JVM会基于JIT即时编译器(just-in-time compiler) 将热点代码转化为机器码,直接交给cpu执行,提高执行效率;
  • JVM解释器:程序执行的时候,解释器首先发挥作用,省去了编译器编译时间,加快程序的执行效率。
  • JIT编译器:在程序运行过程中,随着时间的推移,JIT开始慢慢发挥了作用,把热点代码编译成本地代码后,以后执行相同的代码,即可直接交给CPU执行,带来更高的执行效率

8.JVM组成结构

        JVM由类加载器、运行时数据区、JVM解释器、JIT即时编译器、垃圾回收器、本地方法库等部分组成。

由类加载器完成字节码文件的加载验证和解析,存储至运行时数据区,并由执行引擎中的解释器,完成字节码到机器码的解释执行。同时进行热点代码的统计分析,调用JIT即时编译器将字节码直接编译成机器码,提高执行效率。JVM运行期间的方法调、数据对象统一存放至运行时数据区。

类加载器:字节码必须通过类加载器,通过加载、验证、解析等校验步骤,将字节码文件中的类,加载至JVM的中运行时数据区,才可以执行字节码。

垃圾收集器:JVM在运行期间,通过Garbage Collctor垃圾收集器,定期对运行时数据区进行垃圾对象的回收,从而实现了内存自动管理。


原文地址:https://blog.csdn.net/weixin_63691530/article/details/142466052

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!