JVM虚拟机

一、开发代码到程序运行整个流程

准备开发环境---编写代码---编译代码---测试---部署---运行程序。

1. 准备开发环境

下载和安装软件

  • 开发工具包:Java开发,需要下载并安装Java开发工具包(JDK)。
  • 集成开发环境(IDE):如IntelliJ IDEA、Eclipse、Visual Studio等,这些IDE提供代码编辑、调试和其他开发功能。
  • 版本控制系统:如Git,用于代码版本管理和团队协作。
  • 构建工具:例如,对于Java,可能需要Maven或Gradle来管理项目依赖和构建过程。
  • 数据库:如果项目需要数据库,需要安装数据库软件,如MySQL、PostgreSQL等。

配置环境

  • 环境变量:设置如JAVA_HOMEPATH等环境变量,确保命令行工具可以正确执行。
  • IDE配置:配置IDE,包括安装必要的插件、设置编码格式和代码风格等。

2. 编写代码

  • 在IDE中创建新项目或克隆现有的代码库。
  • 使用IDE或文本编辑器编写源代码。
  • 管理项目依赖和库。

3. 编译代码

  • 使用IDE内置的编译功能或命令行工具(如javac)编译代码,生成可执行文件或字节码。

4. 测试

  • 单元测试:编写和运行单元测试来验证代码的各个部分是否按预期工作。
  • 集成测试:确保不同的代码模块能够正确集成和协同工作。
  • 系统测试:在完整的系统或类似生产环境中运行应用程序,确保所有功能和性能指标符合要求。

5. 部署

  • 将代码部署到测试服务器或生产环境。
  • 使用部署工具(如Jenkins、Docker)来自动化部署过程。

6. 运行程序

  • 在服务器或客户端运行程序。
  • 监控程序性能和稳定性。

7. 维护和更新

  • 根据反馈和监控结果对代码进行维护和更新。
  • 重复测试、部署和监控的步骤以确保更新的质量。

在整个过程中,研发人员可能还需要使用其他工具和服务,如API测试工具(Postman)、性能测试工具(JMeter)、错误跟踪系统(JIRA)、文档管理系统(Confluence)等,以支持开发工作的不同方面。此外,根据项目的具体需求,可能还需要配置和使用其他专门的软件和环境。

二、JVM定义

1.是什么

JVM(Java Virtual Machine)简称Java虚拟机,也就是一个虚拟的计算机,一个抽象的计算机,为运行Java字节码提供了一个运行时环境。存在于软件层面,通过在实际的物理硬件上模拟虚拟机指令集来运行Java应用程序,不依赖于任何特定的底层硬件和操作系统。因此Java程序可以在任何安装有JVM的系统上运行,无需修改代码。JVM是Java技术的核心组成部分,使得Java能够实现“一次编写,到处运行”(Write Once, Run Anywhere,WORA)的跨平台特性。

2.从哪来

不是每台电脑默认都有JVM(Java虚拟机),运行Java程序必须有JVM,但它不是操作系统的标准组件,需要用户自行安装。通常,当安装Java开发工具包(JDK)或Java运行时环境(JRE)时,JVM就会作为安装包的一部分被安装到你的电脑上

  • JDK:Java Development Kit,开发Java应用程序的软件开发环境,包括了JVM、Java编译器(javac)、Java库(rt.jar)等开发工具和资源。
  • JRE:Java Runtime Environment,运行Java应用程序所需的环境,包括JVM、Java类库等运行时组件。

如果电脑上没有安装Java或者安装的是没有包含JVM的其他程序,那么电脑就不会有JVM。只有安装了JDK或JRE之后,电脑上才会有JVM。

总结来说,电脑上是否有JVM取决于是否安装了Java,而不是单纯地安装Java的jar包。Jar包是Java归档文件,用于分发和部署Java应用程序,但它本身并不包含JVM。

3.作用

  1. 跨平台运行: JVM为Java字节码提供了一个跨平台的运行环境。Java源代码被编译成字节码(.class文件),这些字节码可以在任何实现了JVM规范的虚拟机上运行。

  2. 内存管理: JVM负责Java程序中内存的分配和管理。它提供了垃圾收集(Garbage Collection)机制,自动回收不再使用的对象,减轻了程序员手动管理内存的负担。

  3. 安全性: JVM提供了一个安全的运行环境,通过沙箱机制限制Java程序的行为,防止恶意代码对宿主系统造成破坏。

  4. 优化性能: JVM在运行时可以通过即时编译(Just-In-Time, JIT)将热点代码编译成优化的机器码,提高程序的执行效率。

  5. 执行环境: JVM提供了执行环境,包括运行时数据区、执行引擎等,用于执行字节码指令、调用本地系统资源。

  6. 多语言支持: 虽然JVM最初是为Java设计的,但现在它也支持其他语言(如Scala, Kotlin, Groovy等)的运行,只要这些语言可以编译成JVM可以执行的字节码。

总之,JVM是Java平台的基石,它不仅使得Java具有跨平台的能力,还提供了内存管理、安全性保护和性能优化等重要的功能。

三、组成

Java虚拟机(JVM)是一个复杂的系统包含多个组件和子系统,共同工作以执行Java字节码

1、类加载器(Class Loader) 

类加载器负责从文件系统或网络位置加载Java类(.class文件),将它们的内容转换成运行时数据结构,并在JVM内存中创建相应的Class对象。

public class Test {

    public void calculate(int num) {
        int b = num + 1;
        System.out.println(b);
    }

    public static void main(String[] args) {
        Test test = new Test();
        test.calculate(1);
    }

}

当研发人员写完上述代码,运行main方法(执行程序)时JVM(Java 虚拟机)会按照以下步骤来执行这段代码
 

编译阶段:开发工具运行时自动编译,通过 Java 编译器(如 javac)将源代码编译成 .class 字节码文件。会生成 Test.class 文件。

类加载阶段: 当程序启动并执行 Test 类的 main() 方法时,JVM 的类加载器会找到 Test.class 文件,并将其加载到 JVM 中。加载过程中,类加载器会验证字节码文件的结构、元数据和符号引用,确保它们符合 JVM 规范。同时类的加载需要符合双亲委派模型

内存分配:JVM 为 Test 类创建对应的类对象,例子中,Test类的字节码信息将被加载到方法区。在执行 main() 方法时,遇到 Test test = new Test(); 这一行,JVM 会在堆区为 Test 对象分配内存空间,并调用其构造函数初始化对象。Test类的一个实例(即test对象)会被分配在堆上。

方法执行:它会在当前线程的Java方法栈上为 hello() 方法创建一个新的栈帧,用于存放局部变量表、操作数栈和其他运行时信息。 局部变量表中分配空间给形参 a 并初始化为传入的值 1。根据字节码指令计算 a+1,并将结果赋值给局部变量 b

执行完毕后,hello() 方法完成其逻辑且无返回值,因此栈帧被弹出,控制权返回到 main() 方法的栈帧。如果程序中使用了 native 方法(本地方法),那么本地方法栈将会涉及到,但在这里并没有使用 native 方法。当执行到 test.hello(1); 时,JVM 查找 hello() 方法的字节码指令并开始执行。

2、运行时数据区(Runtime Data Areas)

 JVM在执行Java程序时用来存储数据的内存区域

2.1堆(Heap):存储所有类实例和数组,是垃圾收集器管理的主要区域。

2.2Java栈(Java Stack):存储局部变量和部分结果,并且在方法调用和返回时参与方法调用的过程。

2.3本地方法栈(Native Method Stack):为JVM使用到的Native方法服务。

2.4程序计数器(Program Counter Register):当前线程执行的字节码的行号指示器。

2.5方法区(Method Area)

存储类信息、常量、静态变量等。

3、执行引擎(Execution Engine)

 执行引擎负责执行字节码指令。它可以通过解释执行(逐条解释字节码)或即时编译(将字节码编译成本地机器码)来执行指令。

4、本地方法接口(Native Method Interface, JNI)

JNI定义了一种标准,允许Java代码和其他语言写的应用程序或库进行交互,这些其他语言的代码段称为Native方法。

5、本地方法库(Native Libraries)

 这些库包含用其他语言(如C或C++)编写的特定于平台的实现,可以通过JNI被JVM调用。

6、垃圾收集器(Garbage Collector, GC)

 垃圾收集器是JVM的一个重要部分,负责自动管理Java堆内存。它定期识别并回收不再使用的对象,释放内存资源。

粗略写了下框架,白天继续........

  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值