为什么openjdk中只包含了jre_深层次理解Jdk JRE JVM以及三者之间的关系

种一颗树的做好时候是现在,所以我们大家一起开始吧!

大家从一开始编程就了解到:想要运行java程序要用到JDK,那么JDK是什么呢?从大概上来讲JDK是java开发者工具包 、JRE 是java运行环境  、 JVM是java虚拟机,从范围上来讲:jdk>>jre>>jvm。下面我们来深层次理解一下Jdk Jre Jvm以及三者之间的关系。

Jdk jRE JVM介绍

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

SE(J2SE),标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE,Java SE包括用于开发Java Web服务的类库,同时,Java SE为Java EE提供了基础。Java SE就是基于JDK和JRE的主要用于桌面应用的开发。

EE(J2EE),企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。Java EE是一种利用Java2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。

ME(J2ME),主要用于移动设备、嵌入式设备上的java应用程序,从JDK 5.0开始,改名为Java ME。

我现在自身用的JDK是1.8.0_211版本的JDK,在命令行我们会看到jdk的版本:

java -version

jdk版本

打开jdk文件夹我们可以看到下面几个文件夹

(1) bin文件夹:存放jdk附带的实用工具  bin (binary)其中文意思即是:二进制

javac.exe  Java语言编译器,它负责将Java源代码(.java文件)转译为字节码(.class文件)文件。

java.exe  Java语言解释器,它负责执行Java字节码文件。

appletviewer.exe  Java Applet小程序查看器。

javadoc.exe  Java语言文档生成器。将源程序中的注释提取成HTML格式文档。

jrre.exse  Java语言归档工具,用它可将包结构压缩成一个以.jar作为扩展名的归档文件。

native2ascii.exe  可以将本地字符转化成为ASCII码的小工具。将不同的文字转化为“\uxxxx”形式的16进制Unicode码。

(2) lib文件夹:类库

Java开发工具使用的归档文件,其中包含tools.jar,它包含支持JDK的工具和实用程序的非核心类。

(3) jre文件夹

Java运行时的环境,其中包含Java虚拟机。

(4) include文件夹

里边包含头文件,支持Java本地接口和Java虚拟机调试程序接口的本地代码编程。

(5) src压缩包

存放Java的源代码。

注意:jdk里的bin、lib文件夹和jre里的bin、lib是不同的,总的来说JDK是用于java程序开发,而jre则是只能运行class而没有编译的功能。

OpenJDK 和 OracleJDK 的区别?

从所属来说:OpenJDK是sunjdk的一个开源版本,oraclejdk是Sun的官方JDK。oraclejdk是基于OpenJDK的。

这一切的发生源于09年4月20日晚,甲骨文和Sun宣布,两家公司已达成正式收购协议。根据协议,甲骨文将以每股9.5美元的价格收购Sun,交易总价值约为74亿美元。这就意味着对于广大程序员来说,有两样至关重要的东西已经掌握在Oracle手里了,一个是Java,一个是MySQL。

在openJdk环境输入java -version 可以看到和oraclejdk环境的区别。

[root@localhost ~]# java -versionopenjdk version "11-ea" 2018-09-25OpenJDK Runtime Environment (build 11-ea+28)OpenJDK 64-Bit Server VM (build 11-ea+28, mixed mode, sharing)

1、授权协议的不同:OpenJDK采用GPL V2协议放出,而Oracle JDK则采用JRL放出。两者协议虽然都是开放源代码的,但是在使用上的不同在于GPL V2允许在商业上使用,而JRL只允许个人研究使用。OpenJDK不包含Deployment(部署)功能:部署的功能包括:Browser Plugin、Java Web Start、以及Java控制面板,这些功能在OpenJDK中是找不到的。

2、OpenJDK源代码不完整:在采用GPL协议的OpenJDK中,SUN JDK的一部分源代码因为产权的问题无法开放给OpenJDK使用,其中最主要的部份就是JMX中的可选元件SNMP部份的代码。但是Icedtea(OpenJDK补丁)则为这些不完整的部分开发了相同功能的源代码 (OpenJDK6),促使OpenJDK更加完整。

3、OpenJDK只包含最精简的JDK:OpenJDK不包含其他的软件包,比如Rhino Java DB JAXP...,并且可以分离的软件包也都是尽量的分离,但是这大多数都是自由软件,你可以自己下载加入。

openjdk官网:http://openjdk.java.net/oracleJDK官网:https://www.oracle.com/java/technologies/javase-downloads.html

java为什么能跨平台运行?

因为Java程序编译之后的代码不是能被硬件系统直接运行的代码,而是一种中间字节码。需要由JVM来把字节码再“翻译”成所对应的硬件平台能够执行的代码。所以Java可以跨平台,是因为它有虚拟机(JVM),JAVA程序不是直接在电脑上运行的,是在虚拟机上进行的,每个系统平台都是有自己的虚拟机(JVM),所以JAVA语言能跨平台。

1、jvm作用

JVM是java字节码执行的引擎,还能优化java字节码,使之转化成效率更高的机器指令。

JVM中类的装载是由类加载器和它的子类来实现的,类加载是java运行时一个重要的系统组件,负责在运行时查找和装入类文件的类。

不同的平台对应着不同的JVM,在执行字节码(class文件)时,JVM负责将每一条要执行的字节码送给解释器,解释器再将其翻译成特定平台的机器指令并执行,这样就实现了跨平台运行。

2、JVM工作原理

JVM在整个JDK中处于最底层,负责与操作系统的交互。操作系统装入jvm是通过JDK中的java.exe来实现的,具体步骤如下:

a、创建JVM装载环境和配置;

b、装载jvm.dll;

c、初始化jvm.dll;

d、调用JNIEnv实例装载并处理class类;

e、运行java程序

会有更多文章和学习资源关注微信公众号「Rise1024」

你可能感兴趣的:(为什么openjdk中只包含了jre_深层次理解Jdk JRE JVM以及三者之间的关系)