【Java基础】JVM介绍

    xiaoxiao2023-03-24  7

    JVM(Java Virtual Machine)是一种抽象的机器,正如”virtual”这个字面意义所表达的一样,它其实是运行在真实机器上的软件,其本身提供java程序执行的环境.

    大家在学习Java语言的时候,都被告知Java程序具有平台无关的特性,其实是通过JVM把平台相关性的东西给屏蔽了,JVM是依赖具体的软硬件环境,JVM通过隐藏底层硬件和操作系统的差异,向上提供统一的接口,这样就实现了Java程序“一次编译,到处运行”的目的.

    JVM是什么?

    可以从一下几个方面理解: 1. JVM具体的功能是定义在标准之中的,标准的实现并没有做限制,供应商可以自由地选择实现算法和策略,当前的JVM标准的实现主要y由Oracle和其他公司提供; 2. JVM的实现也就是我们经常谈到的JRE(Java Runtime Environment); 3. 当你在命令行(jre自带的java命令)执行java class,此时会创建 一个JVM的实例;

    JVM可以做什么?

    JVM可以执行如下操作: 1. 加载Java 代码; 2. 校验Java 代码; 3. 执行Java 代码; 4. 提供Java代码的运行环境;

    JVM的内部结构

    我们通过下面这张图片来了解JVM的内部构成,它主要包含classloader, 内存空间以及执行引擎等等;

    下面分别对JVM所包含的组件简要介绍: 1) Classloader

    Classloader是JVM的一个子系统,主要用来加载java 的class文件,我们一般遇到的场景都是从文件系统中加载以”.class”后缀的Java文件到JVM中,其实还有其他不同功能的Classloader,例如有的可以从网络上面获取class文件,然后将其加载到JVM中,以前的applet就是这样情况;

    2)Class(Method) Area

    这个区域存储的是Java的字节码(也就是程序执行的指令),程序的CP指向该区域的某个字节码,用来指向当前正在执行的指令,一旦当前指令完成,CP会指向下一个字节码指令,Classs(Method) Area是被所有线程共享的(同一个进程内的线程),如果多个进程同时需要访问特定的方法或者执行某指令时,此时就需要进行同步,JVM实现同步功能是通过监控(Moinitor)来实现的 ;

    3)Heap

    Java代码在运行过程中创建的变量都存放在这个区间,例如: Date now = new Date(). 我们经常听到的垃圾回收机制,它的工作内容就是回收Heap存储空间内不在被使用的Java 对象. 另外我们在日常的开发过程中遇到” OutOfMemoryError”这个异常,这个异常主要原因就是JVM在启动的时候规定了Heap的最大值,一旦运行环境需要的存储空间大于这个最大值,就会抛出这个异常,JVM结束当前进程的执行,并打印相关的提示日志信息;

    4)Stack

    Java的Stack用来保存Java执行过程的调用栈,当Java在运行的过程中调用方法,则JVM会创建一帧,用来保存调用方法的环境,当调用的方法执行完成返回后,保存调用方法数据的帧将会被销毁,其实Stack在我们开发过程很有帮助,它可以让我们知道这个方法的调用过程;

    5)Program Counter Register

    这个主要是一个指针,用来保存JVM当前正在执行指令的地址;

    6)Native Method Stack

    它包含应用所使用的所有native 方法;

    7)Execute Engine

    执行引擎包含虚拟处理器、解析器和Just-In-Time(JIT)编译器组成,三者主要的目的是把Java的平台无关的字节码转化为能够在特定平台执行的二进制代码;

    参考:

    JVM (Java Virtual Machine)
    转载请注明原文地址: https://ju.6miu.com/read-1201322.html
    最新回复(0)