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 小时前
构建自定义命令行工具 - 打造专属指令体
开发语言·windows·python
Dfreedom.3 小时前
一文掌握Python四大核心数据结构:变量、结构体、类与枚举
开发语言·数据结构·python·变量·数据类型
一半烟火以谋生3 小时前
Python + Pytest + Allure 自动化测试报告教程
开发语言·python·pytest
虚行3 小时前
C#上位机工程师技能清单文档
开发语言·c#
小羊在睡觉3 小时前
golang定时器
开发语言·后端·golang
CoderCodingNo4 小时前
【GESP】C++四级真题 luogu-B4068 [GESP202412 四级] Recamán
开发语言·c++·算法
Larry_Yanan4 小时前
QML学习笔记(四十四)QML与C++交互:对QML对象设置objectName
开发语言·c++·笔记·qt·学习·ui·交互
百锦再4 小时前
对前后端分离与前后端不分离(通常指服务端渲染)的架构进行全方位的对比分析
java·开发语言·python·架构·eclipse·php·maven
Want5954 小时前
C/C++大雪纷飞①
c语言·开发语言·c++
有时间要学习6 小时前
Qt——窗口
开发语言·qt