Java知识理解:为什么安装JDK以及JDK、JRE、JVM三者关系及相关理解

简介: Java知识理解:为什么安装JDK以及JDK、JRE、JVM三者关系及相关理解

大家都知道电脑的操作系统是由汇编和C语言写出,因此操作系统无法直接识别其他语言。这时我们就需要添加一个(翻译)编译环境,将其他语言(翻译)编译为操作系统能够识别的语言。


Java为我们提供了一个很好的

当我们在电脑编译Java语言时就需要借助一个翻译的平台-----可跨系统的----JDK。


编译过程大致为:

java源程序—>JDK把java翻译成.class—>jre(JDK中包含jre)运行.class文件解释为中间代码—>送给操作系统(C语言识别、汇编语言识别)—>转变为二进制


下面是根据我的理解制作的流程图:

以Windows系统为例

JDK把.java文件翻译成.class文件—>jre运行.class文件—>送给操作系统识别—>汇编语言识别—>转变为二进制,机器进行操作

20190116202749304.png

JDK是 Java 语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm(真正对java进行翻译的),lib中则是jvm工作所需要的类库,而jvm和 lib合起来就称为jre。


一、什么是JDK


通俗来说:JDK 是整个JAVA的核心,包括了Java运行环境,一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。


JDK是java开发工具包,我们学java都会先在机器上装一个JDK,JDK目录下面有六个文件夹:一个src类库源码压缩包、和其他几个声明文件。其中,真正在运行java时起作用的 是以下四个文件夹:bin、include、lib、 jre。其中JDK包含JRE,而JRE包 含JVM。

bin:最主要的是编译器(javac.exe)

include:java和JVM交互用的头文件

lib:第三方类库的存放

jre:java运行环境


总的来说JDK是用于java程序的开发编译,而jre则是为运行 .class文件提供环境 而没有编译功能。


20190116102207679.png

二、什么是JRE


通俗来说:JRE是指java运行环境,包含JVM及Java核心类库。 我们编写的Java程序必须要借助JRE才能运行,光有JVM还不能完成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。(jre里有运行.class的java.exe)


2019011610330164.png


三、什么是JVM


JVM(Java Virtual Machine),即java虚拟机,为 java运行时的环境制定规则,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。针对java用户,也就是拥有可运行的.class文件包(jar或者war)的用户。里面主要包含了jvm和java运行时基本类库(rt.jar)。rt.jar可以简单粗暴地理解为:它就是java源码编译成的jar包。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。


四、JDK、JRE、JVM三者的联系与区别

1.三者联系:


JVM不能单独搞定class的执行,解释class的时候JVM需要调用解释所需要的类库lib。在JDK下面的的jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和

lib和起来就称为jre。 JVM+Lib=JRE。

总体来说就是,我们利用JDK开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码(.class文件),在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。


JDK把java翻译成.class—>jre运行.class—>送给操作系统识别—>C语言识别—>汇编语言识别—>转变为二进制


2.三者区别:


(1)JDK和JRE区别: 在bin文件夹下会发现,JDK有javac.exe而JRE里面没有,javac指令是用来将java文件编译成class文件的,这是开发者需要的,而用户(只需要运行的人)是不需要的。JDK还有jar.exe, javadoc.exe等用于开发的可执行指令文件。这也证实了一个是开发环境,一个是运行环境。


(2)JRE和JVM区别: JVM并不代表就可以执行class了,JVM执行.class还需要JRE下的lib类库的支持,尤其是rt.jar。


(3)JVM和JRE区别: JVM定义执行规则,JRE按照规则执行。


五、相关理解


不使用eclipse编辑器也可以通过记事本写java并成功运行,只要有对应的运行环境即可,只是eclipse为我们提供了便捷。


脚本语言:vb(window系统自带识别环境)、shell(Linux系统自带识别环境)

js(自带浏览器识别)

脚本语言操作系统本身也是并不识别,只是操作系统提前配置了识别环境,我们只需要通过记事本编辑,完成后更改后缀名就可以运行。所以我们认为不需要进行编译可以直接在操作系统执行的就是脚本语言。

目录
相关文章
|
2月前
|
存储 算法 Java
jvm性能优化(一)-基于JDK1.8
jvm性能优化(一)-基于JDK1.8
|
1月前
|
Java
jvm复习,深入理解java虚拟机一:运行时数据区域
这篇文章深入探讨了Java虚拟机的运行时数据区域,包括程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区、元空间和运行时常量池,并讨论了它们的作用、特点以及与垃圾回收的关系。
61 19
jvm复习,深入理解java虚拟机一:运行时数据区域
|
27天前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
26 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
15天前
|
设计模式 Java API
[Java]静态代理与动态代理(基于JDK1.8)
本文介绍了代理模式及其分类,包括静态代理和动态代理。静态代理分为面向接口和面向继承两种形式,分别通过手动创建代理类实现;动态代理则利用反射技术,在运行时动态创建代理对象,分为JDK动态代理和Cglib动态代理。文中通过具体代码示例详细讲解了各种代理模式的实现方式和应用场景。
15 0
[Java]静态代理与动态代理(基于JDK1.8)
|
1月前
|
缓存 Java Maven
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
如何解决Java项目中因JDK版本不匹配导致的编译错误,包括修改`pom.xml`文件、调整项目结构、设置Maven和JDK版本,以及清理缓存和重启IDEA。
38 1
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
|
27天前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
35 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
28天前
|
Java
Java基础之 JDK8 HashMap 源码分析(中间写出与JDK7的区别)
这篇文章详细分析了Java中HashMap的源码,包括JDK8与JDK7的区别、构造函数、put和get方法的实现,以及位运算法的应用,并讨论了JDK8中的优化,如链表转红黑树的阈值和扩容机制。
20 1
|
2月前
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
|
1月前
|
Oracle Java 关系型数据库
jdk17安装全方位手把手安装教程 / 已有jdk8了,安装JDK17后如何配置环境变量 / 多个不同版本的JDK,如何配置环境变量?
本文提供了详细的JDK 17安装教程,包括下载、安装、配置环境变量的步骤,并解释了在已有其他版本JDK的情况下如何管理多个JDK环境。
448 0
|
27天前
|
存储 安全 Java
jvm 锁的 膨胀过程?锁内存怎么变化的
【10月更文挑战第3天】在Java虚拟机(JVM)中,`synchronized`关键字用于实现同步,确保多个线程在访问共享资源时的一致性和线程安全。JVM对`synchronized`进行了优化,以适应不同的竞争场景,这种优化主要体现在锁的膨胀过程,即从偏向锁到轻量级锁,再到重量级锁的转变。下面我们将详细介绍这一过程以及锁在内存中的变化。
36 4
下一篇
无影云桌面