JVM真香系列:java文件到.class文件

本文详细介绍了Java从源代码到可执行的.class文件的全过程,涉及JVM、JDK、JRE的关系,以及javac编译过程,包括词法分析、语法分析、语义分析和字节码生成。通过理解这一过程,有助于深入理解Java的运行机制。
摘要由CSDN通过智能技术生成

什么是JVM

JVM 全称 Java Virtual Machine,也就是我们耳熟能详的 Java 虚拟机。它能识别 .class后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作。

可能有部分小伙伴学习过C++,C++开发出来的程序,编译成二进制文件后,就可以直接执行了,操作系统是能够识别的。

但是咱们开的的Java程序就不一样了,使用javac命令编译出来的的.class文件之后,操作系统是不能识别的,需要对应JVM去做一个转换后,操作系统才能识别。

我们为什么不能像 C++ 一样,直接在操作系统上运行编译后的二进制文件呢?而非要搞一个处于程序与操作系统中间层的虚拟机呢?

这就是 JVM的过人之处了。大家都知道,Java 是一门抽象程度特别高的语言,提供了自动内存管理等一系列的特性。这些特性直接在操作系统上实现是不太可能的,所以就需要JVM 进行做一系列的转换。

大家一开始学Java的时候,就知道有个Write Once, Run Everywhere。就是我们编写了一个java文件经过编译成.class文件后,可以在各种系统中进行运行。

其实这里是有个前提的,我们需要在对应操作系统中安装对应的JVM,然后我们的.class文件就能运行了。

比如:Windows操作系统有对应的JDK安装版本、Linux也有对应的JDK安装版本等。

认识JDK

Java Development Kit (JDK) 是Sun公司(已被Oracle收购)针对Java开发员的软件开发工具包。自从Java推出以来,JDK已经成为使用最广泛的Java SDK(Software development kit)。

经非官方调查,目前JDK8是使用者最多的版本。

JDK14将在4月和7月收到安全更新,然后由9月到期的非LTS版本的JDK 15取代。JDK14包括16项新功能,例如JDK Flight Recorder事件流,模式匹配和开关表达式等特征。

从JDK9之后,Oracle采用了新的发布周期:每6个月发布一个版本,每3年发布一个LTS版本。JDK14是继JDK9之后发布的第四个版本, 该版本为非LTS版本,最新的LTS版本为JDK11。

下面是JDK版本情况

 

 

这个混个眼熟就行,随时关注JDK版本更新和新特性。

官网地址:
https://www.oracle.com/java/

关于JDK安装这里就省略。

JDK、JRE、JVM的关系

上面已经说过JDK和JVM的相关概念,

JRE全程Java Runtime Environment,是运行基于Java语言编写的程序所不可缺少的运行环境。也是通过它,Java的开发者才得以将自己开发的程序发布到用户手中,让用户使用。

三者到底是什么关系呢?

关于三者关系请看官网

https://docs.oracle.com/javase/8/docs/index.html

JDK中包含JRE,也包括JDK,而JRE也包括JDK。范围关系:JDK>JRE>JVM

".java"文件到".class"文件

`javac`命令

编写一个HelloWorld.java文件

 

内容就是一个Java入门

public class HelloWorld {    public static void main(String[] args) {        System.out.println("Hello world");    }}

打开CMD,进入当前目录,使用命令

javac HelloWorld.java

就编译出HelloWorld.class

 

编译过程

这个javac命令过程到底干了些什么呢?

javac背后大致做了这些操作

这个流程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值