scala_【JVM】概述

快速了解JVM

Scala是一门运行在Java虚拟机(JVM)上的编程语言,这意味着它可以无缝地运行在现有的Java环境中,并兼容现有的Java程序‌,Scala的源代码被编译成Java字节码,因此可以在JVM上运行,并能够调用现有的Java类库‌

JVM

(Java Virtual Machine),即Java虚拟机,是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现Java程序的运行‌

‌定义与实质‌

JVM是Java的运行环境,它负责将Java字节码转换为特定操作系统上的机器指令,并管理程序的运行时环境
JVM是一种用于计算设备的规范,它定义了一个抽象的机器或处理器,以及相应的指令系统‌

特点与优势

  • 平台无关性
    • JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在JVM上运行的目标代码(字节码),就可以在多种平台上不加修改地运行
  • 跨平台性
    • 任何平台只要装有针对于该平台的JVM,字节码文件(.class)就可以在该平台上运行,实现了"一次编译,多次运行"的特性
  • ‌自动内存管理
    • JVM具有自动内存管理机制,如垃圾回收等,减轻了程序员的内存管理负担,并降低了内存泄漏或内存溢出的风险

‌结构与组成

  1. ‌类加载器(ClassLoader)
    • 负责查找并加载类文件的字节码,转换成JVM能理解的数据结构,并存储在方法区中
  2. 运行时数据区(Runtime Data Area)
    • 是JVM内存管理的重要部分,JVM在执行Java程序时用于存储数据的主要区域。它包括了方法区(Method Area)、Java堆(Heap)、虚拟机栈(Stack)、程序计数器(Program Counter)和本地方法栈(Native Method Stack)等部分‌
      • 方法区‌:存储已被加载的类信息、常量、静态变量等数据
      • Java堆‌:存储对象实例,是垃圾回收的主要区域
      • 虚拟机栈‌:存储局部变量表、操作数栈、动态链接、方法出口等信息,是线程私有的
      • 程序计数器‌:存储当前线程执行的字节码行号,是线程私有的,且不会出现OutOfMemoryError
      • 本地方法栈‌:与虚拟机栈类似,但为Native方法服务
  3. ‌执行引擎(Execution Engine)
    • 也叫解释器,负责解释或编译字节码,执行Java程序,包含解释器、即时编译器(JIT)等组件
  4. 本地库接口(Native Interface)
    • 与native lib(本地方法库)交互,融合其他编程语言为Java所用,它是JVM与其他编程语言交互的接口,允许Java程序调用用其他语言编写的本地方法‌

‌运行流程

  1. 编写Java源代码,并保存为.java文件
  2. 使用Java编译器(如javac)将.java文件编译成Java字节码,存储在.class文件中
  3. 当Java程序运行时,JVM通过类加载器加载这些.class文件,并进行链接和初始化
  4. 加载完成后,JVM将字节码提交给执行引擎进行执行,执行引擎可以通过解释器逐条解释执行字节码,也可以通过即时编译器将部分字节码转换成本地机器码以提高效率‌
相关推荐
南 阳2 分钟前
Python从入门到精通day48
开发语言·python
晨晖26 分钟前
java容器类的博客
java·开发语言
leo__52020 分钟前
MHT多假设跟踪算法(Multiple Hypothesis Tracking)MATLAB实现
开发语言·算法·matlab
燃于AC之乐20 分钟前
深入解剖STL RB-tree(红黑树):用图解带入相关复杂操作实现
开发语言·c++·stl·红黑树·大厂面试·图解·插入操作
a11177622 分钟前
堆叠式流程图编辑器(html 开源)
开发语言·前端·javascript·开源·编辑器·html·流程图
new code Boy27 分钟前
JavaScript转Python”的速查表
开发语言·javascript·python
老友@30 分钟前
云计算的统一心智模型
开发语言·ci/cd·docker·云计算·k8s·perl
Elnaij32 分钟前
从C++开始的编程生活(19)——set和map
开发语言·c++
茉莉玫瑰花茶33 分钟前
C++ ORM 实战:ODB 框架全解析(Linux + MySQL)
jvm·数据库·oracle
qq_1728055943 分钟前
基于Go的动态定时器管理功能架构方案设计与实现
开发语言·架构·golang