栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java环境配置——JDK的选择下载安装

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java环境配置——JDK的选择下载安装

JDK的简介以及版本选择、下载与安装

安装Eclipse需要提前安装JDK,否则会在刚开始安装程序运行之后,就弹出对话框,提示尚未安装JDK。此处给出JDK官网的下载地址。

JDK:Java Development Kit,又名Java Platform(这个是我看官网上给的,详见下面的第二张截图),即Java 开发工具包,是针对Java的免费软件开发工具包,是面向开发人员使用的SDK,为Java程序的开发提供支持,Java开发的核心。JDK提供了Java的开发环境和运行环境,包括JRE 和一些好用的小工具,例如:javac.exe,java.exe,jar.exe 等。需要配置环境变量。
 
SDK:Software Development Kit,即软件开发工具包。是(为特定的软件包、软件框架、硬件平台、操作系统等)建立应用软件时所需要用的开发工具的集合,通常从目标系统开发者那里获得。自认可以理解为一个已经实现好的现成函数功能库。
 
JRE:Java Runtime Environment,即Java 运行时环境,是运行JAVA程序所必须的环境的集合,面向Java程序的使用者。主要包含两个部分,Java虚拟机(JVM)的标准实现和 Java核心类库它相对于 jvm 来说,多出来的是一部分的 Java 核心类库。

java平台移植性的原因

JVM:Java Virtual Machine,即Java虚拟机。它只认识 xxx.class 类型的文件(即文件中的字节码指令),并能够按class 文件中的字节码指令调用操作系统提供的 API 完成相关操作。针对不同的系统有不同的 jvm 实现——有 Linux 版本的 jvm 实现,也有 Windows 版本的 jvm 实现——但是同一段代码在编译后的字节码是一样的。比如,在 Java层面,我们调用系统声音设备的代码是唯一的,和哪个操作系统无关,编译生成的字节码也是唯一的。但是这一段字节码在不同的 jvm 实现上会映射到不同的操作系统API上调用,从而实现Java可跨平台运行——即换环境,但是不必再编译一次——“一次编译,到处运行”的效果。
 
(自认)Java之所以具有平台移植性,是因为Java程序运行在JVM中,而与底层操作系统的交互,全部交由JVM实现——即Java跨平台靠的是JVM能跨平台。
 
—————————————————————————————————————————————————————
注:以下与C++间的比较,是我在网上看到的,是否正确待确认
C++底层直接调用操作系统;而java是在操作系统之上加了一层JVM,所以一般来说C++性能更好。与操作系统的强锁定(即C++直接调用操作系统),使C++在不同操作系统或者硬件平台运行时,都要对程序进行改进和调整(即需要重新编译,C++代码是否还用改呢?),而Java在这种情况下就不用再重新编译了。当然JVM在让Java获得跨平台的可移植性的同时,也造成了Java在性能上一定程度的下降。但是,随着Java版本的不断更新——技术的提高、数据结构算法的应用,JVM的性能也一直在升级,普通应用场景下,已经和C++性能相关不大。
 
—————————————————————————————————————————————————————

解释执行和编译执行

解释执行:类似于“同声翻译”。解释一句后就提交计算机执行一句,并不形成目标程序。解释执行的优势在于不用等待,但效率较低,不生成可独立执行的可执行文件——下次执行时,还是需要逐行解释——应用程序不能脱离其解释器,但这种方式比较灵活,可以动态地调整、修改应用程序,适合于人通过终端设备与计算机会话。
编译执行:由编译程序将目标代码一次性编译成目标(代码的)程序,再由机器运行,因此目标程序可以脱离其语言环境独立执行,而且下次运行时(若无代码修改、不更换所执行的环境)无需重新编译。编译执行的优势在于实际运行中效率更高,但程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件.obj才能执行。只有目标文件而没有源代码时,修改很不方便。
java程序是解释执行or java混合执行
下面四段为博客所见,待验证。
①Java有多个编译器。编译器归谁(是在JVM里的?)。
②(mixed模式下)Java代码经过javac编译成class文件(字节码),
class(字节码)文件经过JVM编译成机器码后,进行解释执行(解释执行),在这同时,若计算机资源充足,对于热点代码,JIT(JustInTime)编译器会在解释运行的同时将其编译为机器码执行(编译运行)。
③主流JVM的实现都是混合形式的,以Oracle JDK提供的HotSpot虚拟机为例【Oracle Hotspot JVM 中有两个JIT compiler 一个是C1,对应的模式是client; 一个是C2,对应的模式是server。client一般在我们进行开发的时候使用,server模式一般在生产环境使用。
JVM有不同的运行模式,mixed模式是默认模式(用-Xmixed开启),int模式是解释模式(即全部采用解释执行,用-Xint开启),comp模式(用-Xcomp开启)是编译模式,JVM关闭解释模式,采用编译模式运行】(
那就是说还有别的JDK?),它提供了两种编译模式:解释执行 和 即时编译(JIT,Just-In-Time)。即时编译就是我们前面所说的编译执行。即时编译存在的意义在于它是提高程序性能的重要手段之一。根据“二八定律”(即:百分之二十的代码占据百分之八十的系统资源),对于大部分不常用的代码,我们采用解释执行的方式,用到就去逐条解释运行;对于一些仅占据小部分的热点代码(可认为是反复执行的重要代码),则采用编译执行,将之翻译为机器码高效执行,提高程序的效率。在计算机资源充足的情况,字节码的解释执行和编译执行可以同时进行,编译好的机器码会在下次调用该方法时启动,替换原本的解释执行。还有博客说“它首先由编译器编译成.class(字节码)文件,然后在通过JVM从.class文件中读一行解释执行一行”。
④Java将源码编译为.class文件(字节码文件),JVM解释执行.class文件。
 
注:机器码是CPU直接读取运行的机器指令,运行速度非常快,但是不具有可读性。计算机所能识别的语言只有机器语言,即由0和1构成的代码。
字节码是Java语言中的一种中间状态的二进制代码,需要直译器转译后才可能成功的成为机器码(Java的编译过程就是将源程序编译为字节码文件——.class文件的过程)。

打开官网首页,如下图所示,在左侧导航栏处根据自己的需要找到相应的JDK即可。

JDK版本的选择
首先,确定下版本的叫法。看简书上的说法,下面的版本应该叫1.12。

其次,我在网上看到一篇博客(博客链接)介绍了Java版本的选取,文中将Java的所有版本分为两种:CPU、PSU,并在文中提到 “ Oracle 强烈建议所有 Java SE 用户升级到相应版本系列的最新 CPU 版本。大多数用户应当选择 CPU 版本。”这个分法是否正确,待确认
这里简单总结一下该博客的内容:
PSU(补丁集更新):包含相应 CPU 中的所有修复以及其他非重要修复。
CPU( 重要补丁更新):包含安全漏洞修复和重要漏洞修复。后续 CPU 版本将包含当前 PSU 的所有修复。 版本号采用奇数编号(即 7u71、7u65 — 有关 Java SE 版本编号方式的详细信息,详细信息链接)。

最后,我看了一些关于介绍Java各版本区别的博客和百度百科,JDK版本区别这是其中一篇,只给出了1.5到1.10版本,大家可以参考。

安装JDK后核对压缩包里的文件(此部分为回忆版)

.pack文件要解压成.jar文件:unpack200 文件名.pack 文件名.jar

环境变量的配置

安装JDK后,之所以需要配置环境变量,是因为

  • 用户变量新建Java HOME,值为JDK的安装根目录;此篇博客
  • 系统变量中的path变量设置后,在命令提示行中可以直接输入Java命令,而不必输入JDK的完整路径。path变量需要将JDK的bin目录的安装路径存入即可。系统变量配置path如下图所示,官网解释如下:

    详情见JDK官网解释。
  • 有的博客会要求设置Classpath,Classpath在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序所需要的类或者包。

事实上JDK 5.0默认就会到当前工作目录(上面的.设置),以及JDK的lib目录(这里假设是C:Program FilesJavajdk1.5.0_06lib)中寻找Java程序。所以如果Java程序是在这两个目录中,则不必设置Classpath变量也可以找得到,将来如果Java程序不是放置在这两个目录时,则可以按上述设置Classpath。

这里给大家展示一下JDK的bin文件夹下的内容:都是一些dll文件

静态链接库和动态链接库

dll文件(Dynamic linkable Library):即动态链接库文件,简称“库文件”,又称“应用程序拓展”,是软件文件类型。是一个包含可由多个程序同时使用的代码和数据的库,提供了一些可以直接拿来用的变量、函数或类。例如,在 Windows 操作系统中,Comdlg32 DLL 执行与对话框有关的常见函数。因此,每个程序都可以使用该 DLL 中包含的功能来实现“打开”对话框。这有助于促进代码重用和内存的有效使用。
在Windows中,许多应用程序并不是一个完整的可执行文件,而是被分割成一些相对独立的dll文件。当我们执行某一个程序时,相应的DLL文件就会被调用。自认即dll文件是一种只能等待被调用,无法向.exe文件那样可以自己执行的文件。
好处:通过dll文件,程序可以实现模块化——由相对独立的组件组成。
①提高程序加载速度,可以根据需要,只将需要的模块加载,而不必全部加载。例如,一个计帐程序可以按模块来销售。可以在运行时才将各个模块加载到主程序中——模块是彼此独立的,所以程序的加载速度更快;模块只在相应的功能被请求时才加载,而不必在最一开始就将所有模块不管是否需要就全部加载,节省了加载的工作量。
②数据统一管理,更新更方便。可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。例如,你可能具有一个工资计算程序,而税率每年都会更改。当这些更改被隔离到 DLL 中以后,您无需重新生成或安装整个程序就可以应用更新。
 
经历了“无库-静态链接库-动态链接库”这个过程的发展。静态链接库与动态链接库都是共享代码的方式
静态链接库:.lib文件,库中的代码最后需要链接到你的可执行文件中去,所以静态连接的可执行文件一般比较大一些。在静态库情况下,函数和数据被编译进一个二进制文件(通常扩展名为*.LIB),Visual C++的编译器在链接过程中将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行文件。这个过程称为"静态链接",此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。

动态链接库:动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 文件中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个 DLL 副本的内容。使用动态链接库可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。
 
共享dll文件:一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/323002.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号