Java-jdk与jre

想知道Java代码是怎么执行的过不去的坎,jdk与jre。

之前只写出来怎么写第一个Java程序,没说怎么执行的。

我们写代码的目的是什么?

是不是让计算机按照我们的的想法执行。

计算机只能识别什么?

是不是  0和1,所以最一定是转换为0和1,让机器执行的。按照这个思路我们再往下看

我们的问题是不是转换成怎么让Java代码变成0和1 ,是不是得有一个东西干这件事,这是就需要我们的jdk和jre

我们写的Java代码都放到.java文件中,像这样:

学习过Java的都知道,要安装jdk,配置环境便量。那么很显然jdk一定有东西。

具体怎么执行的,我们要知道jdk里面要有什么东西,才能知道是怎么执行的

看着东西很多,我们主要记住这几个文件夹:bin、include、jre、legal、lib

我们才看看jre里面有哪些东西,主要的文件夹:bin、legal、lib

先记住这两者之间有什么不同(有的面试官会问---不用怀疑就是这么问)

剩下的问题就是每一个文件夹是干什么?

bin文件夹中的这三个文件记住

先说javac文件:它是将.java文件编程Java虚拟机可以执行的文件.class文件,再由虚拟机匹配相关的操作系统在机器上执行。

java文件是将.class文件执行的

javadoc文件是生成api文件用的

那么我们怎么执行我们写的第一个程序?

先变成.class文件再通过java文件执行处结果

具体怎么实现:

需要一个编写器(就是写代码的工具),将写好的.java文件编译成.class文件再通过java文件执行

可以用记事本编写Java代码

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

再通过cmd的方式编译执行,具体怎么执行的,将上面的代码复制到我们刚刚新建的记事本文档中(txt),粘贴、保存、退出、修改文件扩展名为.java文件。打开文件所在位置,在地址栏输入cmd命令回车,便进入了该文件所在的命令行窗口,依次执行下面的操作

javac 要执行的文件名包含扩展名  如:java Test.java       这是编译Test文件

java 要执行的文件名  如java Test     这是执行Test文件

便看到我们的执行出来的结果,这个方法比较原始,现在的工具都是编译执行一块

Java代码执行流程

.java文件通过编译器---》.class文件再通过jvm将Java字节码解释成机器码再执行

java文件----(通过编译器javac)-->.class文件-----(jvm)----->计算机可执行二进制文件 (好记)

这也就解释为什么Java是一个编译和解释并存的语言(有可能面试的时候问)

其实Java执行的效率也就满在这个地方了(解释),解释是一句一执行,也就有了jvm调优。

在这里面它也有一个类似于缓存热点数据机制JIT。当然还有其他的机制,GC(垃圾回收机制),类加载机制、多线程(先知道有这些东西)

上面是jdk里面的bin

下面是jre里面的bin,发现什么问题,这也是本质区别,jre只能执行编译好的.class文件

这也就是说为什么jdk是程序员使用,而jre是给客户用的(面试的时候,一定要说出这个区别,才算你会)

JDK安装目录下主要文件夹及文件作用:

(1)bin文件夹:提供JDK工具程序:包括javac、java、javadoc等可执行程序。

(2)jre文件夹:存放java运行环境文件。

(3)lib文件夹:存放java的类库文件。

(4)include文件夹:存放本地方法的文件。

宏观上二者之间的区别:

        jdk中比jre多了两个目录jre、include

JVM主要组成部分

类加载器(Class Loader)

  • 作用:加载类文件到内存。

  • 描述:类加载器根据给定的全限定名类名(如:java.lang.Object)来装载class文件到运行时数据区中的方法区。

运行时数据区(Runtime Data Area)

  • 组成部分:

    • 堆(Heap):线程共享,用来存放实例化对象。堆被划分为三个部分:年轻代、老年代和永久代(在JDK8中取消了永久代)。

    • 方法区(Method Area):线程共享,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。也称之为元数据

    • 虚拟机栈(Java Virtual Machine Stack):每个线程都有自己的虚拟机栈,用于存储栈帧,每个栈帧对应一个被调用的方法。

    • 本地方法栈(Native Method Stack):与虚拟机栈类似,但用于执行本地方法(Native Method)。

    • 程序计数器(Program Counter Register):指示Java虚拟机下一条需要执行的字节码指令,是线程私有的。

执行引擎(Execution Engine)

  • 作用:对JVM指令进行解析,翻译成机器码,然后提交到操作系统中执行。

  • 描述:执行引擎也叫解释器,负责解释命令,交由操作系统执行。

本地库接口(Native Interface)

  • 作用:供Java调用的融合了不同开发语言的原生库。

  • 描述:本地接口的作用是融合不同的语言为Java所用,与native libraries交互,是其它编程语言交互的接口。

本地方法库(Native Method Libraries)

  • 作用:Java本地方法的具体实现。

  • 描述:包含用于执行本地方法的代码库。

大家可以自己去官网下载jdk,自己学习使用1.8就够用,21的是可以虚拟线程的比较哇塞,得有小钱钱,官网地址:https://www.oracle.com/cn/java/technologies/downloads/

工具可是下载:IntelliJ IDEA,也可以官网下载,去软件管家公众号上看看
提前安装,jdk1.8可能需要自己配置环境,在我之前的文章里面有,burp安装教程里面
下一章节:基本数据类型的使用与计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值