美文网首页
JVM-相关概念

JVM-相关概念

作者: ssttIsme | 来源:发表于2023-12-30 17:11 被阅读0次

Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成。
Java技术的核心就是Java虚拟机(JVM,Java Virtual Machine),因为所有的Java程序都运行在Java虚拟机内部。

  • 作用
    Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,编译为对应平台上的机器指令执行。每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。
  • 特点
    ▶一次编译,到处运行。
    ▶自动内存管理。
    ▶自动垃圾回收。

JVM是运行在操作系统之上的,它与硬件没有直接的交互。不同的操作系统装的JVM是有区别的。

JVM的整体结构

类装载器子系统将字节码文件加载到内存中生成Class对象然后在执行引擎解释运行。这个过程中涉及到加载->链接->初始化。在内存中多线程共享堆和方法区。每个线程独有一份Java虚拟机栈,本地方法栈和程序计数器。

1程序计数器:每个线程一块,指向当前线程正在执行的字节码代码的行号。如果当前线程执行的是navtive方法,则其值为null。

2Java虚拟机栈:线程私有,每个线程对应一个Java虚拟机栈,其生命周期与线程同进同退。每个Java方法在被调用的时候都会创建一个栈帧,并入栈。一旦完成调用,则出栈。所有的栈帧都出栈后,线程也就完成了使命。

3本地方法栈:功能与Java虚拟机栈十分相同。区别在于,本地方法栈为虚拟机使用到的native方法服务。

4堆:堆是JVM内存占用最大,管理最复杂的一个区域。堆是所有线程共享的一块区域,主要用来存放对象和数组。在Java虚拟机规范中有描述:所有的对象实例和数组都要在堆上分配。但是随着JIT(JUST-IN-TIME)编译器的发展与逃逸分析技术的逐渐成熟,并不是所有对象都只在堆上分配了,比如:随着逃逸分析技术的逐渐成熟,在即使能被回收的对象也有肯能会在虚拟机栈上分配。
1.7后,字符串常量池从永久代中剥离出来,存放在堆中。堆有自己进一步的内存分块划分。

5执行引擎:分为解释器、JIT编译器(后端编译器)【编译反复执行的热点代码】和垃圾回收器。操作系统只能识别机器指令,但是字节码指令不等同于机器指令。要想字节码文件能够解释执行就需要借助执行引擎,把高级语言翻译成机器语言。

Java代码的执行流程

JVM的架构模型

Java编译器输入的指令流基本上是一种基于栈的指令集架构。
基于栈式架构的特点:
▶设计和实现简单(Java程序的运行通过方法实现,每执行一个方法可以理解为一个入栈操作,栈顶就是当前正在执行的方法,方法执行完做一个出栈的操作就可以了),适用于资源受限的系统(嵌入式设备、小型设备)
▶避开了寄存器的分配难题;使用零地址指令(没有地址,只有操作数)方式分配
▶指令流中的指令大部分是零地址指令,其执行流程依赖于操作栈(只需要操作栈顶)。指令集更小(字节码文件中每8位字节进行对齐),编译器容易实现
▶不需要硬件支持,可移植性更好,更好实现跨平台(因为栈是内存层面的)
▶缺点是性能下降,实现同样的功能需要更多的指令

JVM的生命周期

虚拟机的启动

Java虚拟机的启动时通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类由虚拟机的具体实现指定的。

虚拟机的执行

▶一个运行中的Java虚拟机的任务是执行Java程序
▶程序开始执行时他才运行,程序结束他就停止
▶执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程

虚拟机的退出

▶程序正常执行结束
▶程序在执行过程中遇到了异常或错误而异常终止
▶由于操作系统出现错误从而导致Java虚拟机进程终止
▶某线程调用调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作(主动结束程序执行)
▶Java本地方法接口(JNI-Java Native Interface)规范中描述的用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况

相关文章

  • JVM类加载器与双亲委派模型(JDK8)

    引言 在上文JVM-类加载机制[https://imchenway.com/2021/07/01/JVM-%E7%...

  • 相关概念

    中间件 是提供系统软件和应用软件之间连接的软件,以便于各种部件之间的沟通,特别是应用软件对于系统软件的集中的逻辑。...

  • JVM-常见参数

    [TOC] JVM-常见参数 实验平台MacOSmacOS Catalina 10.15内存 8 GB 2133 ...

  • 14-进程和任务计划

    本章内容 ◆ 进程相关概念◆ 进程工具◆ 系统性能相关工具◆ 计划任务 进程概念 进程,线程和协程 进程相关概念 ...

  • spring相关概念

    1、spring是开源的轻量级框架 2、spring核心主要两部分: (1)aop:面向切面编程,扩展功能不是修改...

  • Linux 相关概念

    Linux 文件系统 ext 文件系统(Extended 扩展)几乎不产生磁盘碎片,所以在Linux系统下一般不需...

  • Java概念相关

    封装,继承,多态,生命周期,垃圾回收,虚拟机,类加载器,反射

  • HTML——相关概念

    1.HTML文档(网页) HTML文档又称为网页。 2.Web浏览器 用于读取HTML文件,并且将其作为网页显示 ...

  • Openshift相关概念

    转:https://www.jianshu.com/p/a4712351142d Openshift是一个开源容器...

  • 论文相关概念

    最近看了许多论文,有一些概念本来也无关紧要,但是看得多了也就自然而然的懂了,在这里分享给大家。 1. Transa...

网友评论

      本文标题:JVM-相关概念

      本文链接:https://www.haomeiwen.com/subject/nsjabrtx.html