Java认知篇(十一-十七)

目录

十一、Java为什么需要虚拟机?

1. 简介

2. JVM的快速理解

十二、什么是跨平台性?原理是什么

十三、什么是字节码?采用字节码的大好处是什么

十四、Java 编程都使用哪些软件?

1. 文本编辑器

2. 集成开发环境(IDE)

2.1 Eclipse

2.2 IDEA

ⅰ. 简介

ⅱ. IDEA项目结构

ⅲ. IDEA 常用快捷键

2.3 NetBeans:NetBeans

2.4 JCreator:JCreator

2.5 BlueJ:BlueJ

2.6 总结

3. 集成开发环境(IDE)?

3.1 什么是集成开发环境(IDE)?

3.2 IDE的作用和优势

ⅰ. 提高开发效率

ⅱ. 提高代码质量

ⅲ. 提高团队协作效率

3.3 IDE的种类和应用场景

3.4 如何选择适合自己的IDE?

3.5 总结

十五、什么是Java程序的主类?应用程序和小程序的主类有何不同?

1. 什么是Java程序的主类

2. 应用程序和小程序的主类有何不同?

3. Java 应用程序与小程序之间有哪些差别?

十六、C++和java有什么区别?

1. 第一种说法

2. 第二种说法

十七、OracleJDK & OpenJDK

1. Oracle JDK

a. Oracle JDK 是什么?

b. Oracle JDK 版本如何选择?

ⅰ. Java SE 发布节奏以及不同版本的差距

1. Java SE 8 以及之前版本的发布节奏和不同版本的差距

a. 发布的版本区别

b. 发布周期

c. 版本的关系

2. Java SE 9 以及之后版本的发布节奏和不同版本的差距

a. 发布的版本区别

b. 发布周期

c. 版本的关系

ⅱ. Oracle JDK收费吗?

2. Open JDK

3. OracleJDK & OpenJDK有哪些区别

a. 支持性不同

b. 商业授权不同

c. 可用性不同

d. 功能不同

e. 更新和版本不同

f. 安全不同

4. OpenJDK 和 OracleJDK 哪个jdk更好更稳定,正式项目用哪个呢?


十一、Java为什么需要虚拟机?

1. 简介

曾几何时,我们还是初识Hello World的时候,我们哪曾知道,Java这门神奇的语言,在执行我们

的代码的时候,不是直接将我们所编写的Java代码交付给操作系统底层进行解析编译,而是采用了

JDK来对Java代码进行编译,编译成dotClass文件后,将dotClass文件转交至JRE中。(dotClass

其实就是.class)

jre也就是JavaRunTimeEnvironment,java运行环境,因为在这里,存在着Java的秘密武器,也就

是JVM!

Jvm是组成JRE的重要核心,可以说,JVM是JRE的灵魂,控制着躯壳执行着代码的艺术。

JRE中包含着Jvm调用所需要的几乎所有类库,可以这么说,jvm是jre的驱动,也是整个JDK的驱

动,更是整个Java的驱动!

大家好,我是研J小政,今天我们来简单聊一聊为什么Java需要JVM,今天的话题很大,但是限制

于篇幅我们只是简单的聊一聊!

2. JVM的快速理解

JVM 是Java 虚拟机,即Java Virtual Machine的意思,“虚拟”这两个字,基本上也可以看出,要想

在操作系统上实现众多的功能,是需要一个架构完整,执行力很强的执行标准!这是不是有点类似

于“操作系统”?

JVM,实则就是一个Java指令执行规范,正是这一标准构成了JVM。

我们学Java的时候我们都知道有JDK,JRE,当我们学的深入的时候,我们又会发现,还有JVM这

号神仙。。。

我们先捋清楚这些东西之间的关系:

我先给出答案:JDK是包含JRE的,JRE是包含JVM的。

JDK我们都知道是java开发工具包,正所谓工具包,也是因为他的主要作用是为jvm提供了额外的

类库工具,比如编译Java文件的javac二进制程序,这些都是存储在bin目录下,是不是很奇怪,为

什么很多程序安装的时候都带有一个bin目录?因为这个bin是binary的意思,是binary的简写bin,

也就是二进制文件的目录。

类似的小工具除了Javac还有Java(bin目录下的.exe二进制文件)、jar等文件。好,那么jre呢?

JRE是为Java程序提供执行环境的,有了jre,我们的java程序就可以在浏览器中运行了。为什么需

要jre呢?

因为我们的jvm,我们之前都知道java是一次编译到处运行,这是怎么办到的?

这其实是jre的功劳,我们的jre中文不就是java运行时环境吗,不错,我们知道java是运行在jvm中

的,java运行时环境不就是jvm的运行环境吗,俗话说巧妇难为无米之炊,光有jvm是不可能执行的

了所有的java程序的,还需要

以来一些底层的c语言写的类库,这时候,jre的左右就很明显了,jre为jvm提供了几乎所有的依赖

类库,这样一来,就真正实现了一次编译到处运行!

jvm能执行java程序,是直接执行java文件吗?

不是,我们说过,Java与操作系统之间不是直接将.java文件转交给操作系统处理的,而是将.java

文件通过javac二进制文件编译成.class文件,也称之为字节码文件,字节码文件直接给操作系统执

行吗?

并不是,我们来看看普通程序与Java程序执行区别在哪里:

而Java程序的加载过程:

什么意思,意思就是告诉你,字节码文件操作系统也是不认识的,字节码文件还需要经过jvm加载

为机器码,也就是Opcode操作码(暂时这么理解因为不全是),翻译成机器码也就是操作系统能

看得懂的语言后,操作系统才回去执行这个java程序,这是什么,这其实有点像我们常说的黑盒测

试,整个流程我们是看不见的,我们只能看见我们编写的java规范编码被操作系统执行了!

我们说,jvm识别字节码文件后,翻译了字节码指令,翻译给操作系统,从而控制操作系统去执行

相应的功能,所以,提及翻译,就不得不简单说一下JVM的翻译字节码文件的方式方法了,jvm翻

译字节码常见的有两种不同的方式,一种是即时加载方法,一种是解释执行。

解释执行是将字节码文件中的opcode与操作数翻译成op指令也就是机器代码,而即时加载是在特

定情况下才会触发,将字节码翻译成机器码后执行。你若想知道字节码文件都包含有什么,那么等

我吃透了jvm我加你好友啊,我跟你畅谈啊!虽然这得等到=猴年马月…

好了今天的浅谈就到这里了,所以,为什么需要jvm知道了吗?

jvm即是对字节码文件规范的最佳约束,也是java建立与操作系统之间沟通的直接桥梁!

因为操作系统是无法直接编译.java文件的,.java文件经过javac程序转为字节码文件进而被jvm翻译

为机器码,只有机器码操作系统才认识啊!

十二、什么是跨平台性?原理是什么

所谓跨平台性,是指java语言编写的程序,一次编译后,可以在多个系统平台上运行。

实现原理:Java程序是通过java虚拟机在系统平台上运行的,只要该系统可以安装相应的java虚拟

机,该系统就可以运行java程序。(注意不是能在所有的平台上运行,关键是该平台是否能安装相

应的虚拟机)。

我的总结:Java程序之所以能够实现跨平台运行,是因为它根本就不直接运行在任何底层平台上,

而是需要在哪里运行,就在哪里(如Windows平台)事先准备好自己的Java平台,而这只是仅仅是安

装和配置一个软件而已!

十三、什么是字节码?采用字节码的大好处是什么

字节码:Java源代码经过虚拟机编译器编译后产生的文件(即扩展为.class的文 件),它不面向任

何特定的处理器,只面向虚拟机。

采用字节码的好处:Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低

的问题,同时又保留了解 释型语言可移植的特点。

所以Java程序运行时比较高效, 而且,由于字节码并不专对一种特定的机器, 因此,Java程序无

须重新编译便可在多种不同的计算机上运行。

十四、Java 编程都使用哪些软件?

1. 文本编辑器

记事本、NotePad++、sublime . . .

2. 集成开发环境(IDE)

常见IDE工具:Eclipse、MyEclipse、IntelliJ IDEA、Jbuilder、NetBeans等等等

2.1 Eclipse

Eclipse官网:http://www.eclipse.org

一款免费开源的Java开发工具,提供强大的代码编辑、调试和部署功能。

它支持大量的插件和扩展,可以快速创建各种Java应用程序,包括企业级应用、桌面应用、Web

应用等。

2.2 IDEA

ⅰ. 简介

IDEA官网:IntelliJ IDEA – the Leading Java and Kotlin IDE

一款流行的商业Java IDE,也提供了强大的开发工具和调试功能。它具有高效的代码编辑器、智能

代码补全和重构工具等,可以提高开发效率和代码质量。

ⅱ. IDEA项目结构

ⅲ. IDEA 常用快捷键
  • main/psvm、sout . . .:快速导入相关带啊吗
  • ctrl + D:复制当前行数据到下一行
  • ctrl + Y:删除所在行
  • ctrl + Alt + L:格式化代码
  • Alt + Shift + ↑,↓:上下移动当前代码
  • ctrl + /:单行注释
  • ctrl + shift + /:多行注释

2.3 NetBeans:NetBeans

另一款开源的Java IDE,提供了丰富的工具和插件,可以快速开发Java应用程序。它还支持多种

编程语言,包括C++、PHP等。

2.4 JCreator:JCreator

一款简单易用的Java开发工具,适合初学者和中级开发者使用。

它提供了快速的代码编辑和调试功能,可以帮助开发者快速创建和部署Java应用程序。

2.5 BlueJ:BlueJ

一款专门为Java初学者设计的集成开发环境。

它提供了简单易懂的界面和交互式调试功能,可以帮助学生快速入门Java编程。

2.6 总结

这些工具可以提供完整的Java开发环境,帮助开发者快速创建、编辑、调试和部署Java应用程

序。

同时,这些工具都支持多种操作系统,包括Windows、Linux和MacOS等。

在选择Java开发工具时,需要考虑自己的编程水平和实际需求。

初学者可以选择简单易用的工具,如BlueJ和JCreator,以快速入门Java编程。

中级开发者则可以选择更为强大的工具,如Eclipse和IntelliJ IDEA,以提高开发效率和代码质量。

以上就是本次对于Java编程使用软件的推荐,

3. 集成开发环境(IDE)?

作为程序员,我们经常会听到关于IDE(集成开发环境)的说法,但是对于不熟悉这个概念的人来

说,IDE到底是什么?它的作用是什么?

为什么在软件开发中使用IDE会更加高效?在本文中,我们将深入探讨IDE的定义、作用和优势。

3.1 什么是集成开发环境(IDE)?

IDE是一种软件应用程序,它集成了多种开发工具和功能,旨在提高软件开发的效率和质量。

IDE通常包含源代码编辑器、自动完成、调试器和构建工具等功能。

IDE还可以提供各种插件和扩展,以满足不同开发需求。

3.2 IDE的作用和优势

ⅰ. 提高开发效率

IDE的作用之一是提高开发效率。IDE提供了丰富的功能和工具,如代码自动完成、语法高亮、代

码重构、调试器等,可以帮助程序员更快地编写和调试代码。

而且,IDE还可以自动管理代码库、构建工具和文档等,从而减少手动操作的时间和错误。

ⅱ. 提高代码质量

IDE可以帮助程序员避免一些常见的编程错误,如语法错误、拼写错误、类型不匹配等。

此外,IDE还可以执行静态代码分析和代码重构等操作,帮助程序员优化代码结构和逻辑,从而提

高代码质量。

ⅲ. 提高团队协作效率

IDE还可以支持多人协作开发,例如通过版本控制系统、代码审查工具和任务管理工具等。

这些工具可以帮助团队成员协同工作,共同完成项目。

而且,IDE还可以自动执行构建和测试等任务,以确保代码的一致性和质量。

3.3 IDE的种类和应用场景

IDE有许多种类,每种IDE都有不同的功能和应用场景。例如,针对不同语言和平台的IDE有不同的

特点。

下面列举一些常见的IDE:

  • Visual Studio:适用于Windows平台的IDE,主要用于C#、C++、Visual Basic、F#等语言的开发。
  • Eclipse:支持多种语言的IDE,例如Java、C++、PHP等。Eclipse还可以通过插件扩展功能,例如Android和Web开发。
  • IntelliJ IDEA:适用于Java开发的IDE,提供了丰富的功能和插件,例如Spring和Android开发。
  • Xcode:适用于macOS和iOS开发的IDE,支持多种语言和框架,例如Swift、Objective-C和Cocoa Touch。
  • Code::Blocks:一个跨平台的开源C++ IDE,支持多种编译器和操作系统。

3.4 如何选择适合自己的IDE?

选择适合自己的IDE需要考虑多个因素,例如开发语言、应用场景、个人偏好和团队协作等。

以下是一些选择IDE的建议:

  • 如果你是初学者,可以选择易于使用和学习的IDE,例如Visual Studio和Eclipse等。
  • 如果你是专业开发者,可以选择针对特定语言和平台的IDE,例如IntelliJ IDEA和Xcode等。
  • 如果你需要跨平台开发,可以选择跨平台的IDE,例如Code::Blocks和Eclipse等。
  • 如果你需要与团队协作开发,可以选择支持版本控制和任务管理等工具的IDE。

3.5 总结

IDE是软件开发中不可或缺的工具,它可以提高开发效率、代码质量和团队协作效率。

选择适合自己的IDE需要考虑多个因素,包括开发语言、应用场景、个人偏好和团队协作等。

通过使用IDE,程序员可以更加高效地编写和管理代码,从而提高软件开发的效率和质量。

十五、什么是Java程序的主类?应用程序和小程序的主类有何不同?

1. 什么是Java程序的主类

⼀个程序中可以有多个类,但只能有⼀个类是主类。

2. 应用程序和小程序的主类有何不同?

  • 在Java应用程序中,这个类是指包含main()方法的类。
  • 在Java小程序中,这个主类是一个继承子系统类JApplet或Applet的子类。

应用程序的主类不一定要求是public类但小程序的主类必须是public类。主类是Java程序执行的入

口点。

3. Java 应用程序与小程序之间有哪些差别?

简单说应用程序是从主线程启动(也就是 main() 方法)。

applet 小程序没有 main() 方法,主要是嵌在浏览器页面上运行(调用init()或者run()来启动),嵌入浏

览器这点跟flash 的小游戏类似。

十六、C++和java有什么区别?

1. 第一种说法

C++和Java是两种广泛应用于软件开发的编程语言,它们具有不同的语法、特性和应用领域。

对于程序员和开发者来说,了解C++和Java之间的区别是重要的,因为这有助于选择适合的语言来

满足特定的需求。

首先,C++是一种面向对象的编程语言,它具有强大的底层编程能力和高性能。

它是从C语言发展而来的,保留了C语言的特性,并增加了面向对象编程的功能。

C++的语法相对较为复杂,允许直接操作内存,提供了更多的灵活性和控制能力。

它广泛用于系统级编程、游戏开发、图形界面等需要高性能和低级别控制的领域。

相比之下,Java是一种跨平台的、面向对象的编程语言。

它被设计成一种更简单、更易学的语言,具有更好的可移植性和可靠性。

Java通过Java虚拟机(JVM)来实现跨平台性,允许开发者编写一次代码,然后在不同的操作系统上运行。

Java的语法相对简单,具有自动内存管理(垃圾回收)的特性,更注重安全性和稳定性。

它广泛应用于企业级应用开发、网络应用、移动应用等领域。

在语言特性方面,C++具有更广泛的指针支持,允许直接对内存进行操作,这使得它在对硬件或系

统进行底层编程时更加灵活。

C++还提供了更多的底层数据类型和运算符重载的能力,使得开发者可以更精细地控制程序的行

为。而Java则提供了自动垃圾回收、异常处理和强类型检查等特性,使得开发者可以编写更安全、

更稳定的代码。

在应用领域方面,C++在需要高性能和实时性的场景下更为常用,例如游戏开发、图形处理、嵌入

式系统等。

而Java在需要跨平台和大规模应用开发的领域更为流行,例如企业级应用、服务器端开发、

Android应用等。

此外,C++和Java在开发生态系统方面也有所不同

C++拥有丰富的第三方库和工具支持,提供了大量的开发资源和社区支持。

Java也有庞大的生态系统,包括广泛的开发框架、库和工具,以及活跃的社区支持。

综上所述,C++和Java是两种不同的编程语言,它们在语法、特性和应用领域等方面存在一些区

别。

选择使用哪种语言取决于项目需求、开发目标和个人偏好。

无论选择哪种语言,掌握其核心概念和特性,并不断学习和实践,都是成为一名优秀开发者的关

键。

2. 第二种说法

c++和java有什么区别

这是很多小伙伴都比较疑虑的问题。其实Java是由C++发展而来,这两种语言比较相似。

但是相对来说,Java语言语法更清晰、易学。如果有C语言的基础,学起Java来会更容易一些。下

面小千在这里列举一些显著的区别。

区别一:解释对编译

Java是一种解释性语言,意味着其在执行时会被“翻译”为二进制形式,也就是java跑得时候必须有

人(jvm)去解释它。

而C则是编译语言,意味着程序只能在特定操作系统上编译并在特定系统上运行,也就是说C一步

到位成机器语言的。

区别二:内存安全

Java是一种内存安全型语言,意味着大家可以为给定数组分配任意参数,即使超出范围也只会返回

错误提示。

C++更为灵活,但代价是一旦分配的参数超出资源范围,则会引起错误甚至严重崩溃。

区别三:性能

Java人气极高,但其代码由于需要在运行前进行解释因此性能表现更差。

C++会被编译为二进制形式,因此其能够立即运行且速度更快。

如果你写一个c++的程序和做同样事情的java程序,可能你感觉两者速度差不多。

但如果这两个程序都足够大、而且c的代码经过过优化,两者的速度差就会变得很显著甚至很惊人,C会比java快

很多。

区别四:指针

指针是一种C++结构,允许您直接在内存空间中进行值管理。Java不支持指针,因此您可能使用值

引用的方式进行值传递。

区别五:重载

重载是指对某种方法或者运算符的功能进行“重新定义”。Java允许方法重载,而C++则允许进行运

算符重载。

了解了c++和java有什么区别,你觉得哪个更好呢?

其实小政认为这两种语言各有各的优势,在目前看来,Java编程语言实用性更为广泛。

十七、OracleJDK & OpenJDK

参考链接

1. Oracle JDK

a. Oracle JDK 是什么?

我们知道,JDK 是 Java Development Kit 的缩写,翻译过来就是 Java 开发工具包。

Oracle JDK 源自 Sun JDK(2009年 Oracle 收购 Sun),Oracle JDK 自然就是 Oracle 公司出品

的 JDK。

所以 Oracle JDK 就是 Oracle 公司开发维护的 Java 开发工具包。

根据 Java Platform Group 产品管理高级总监 Donald Smith 在" Oracle JDK Releases for Java 11

and Later"中的描述:

因为本人英语烂到了令人发指的地步,为了避免浪费时间和不必要的翻译错误,这里就简单引用谷

歌翻译的结果方便粗略理解:

理想情况下,我们会根据您的情况将所有 Oracle JDK builds 简单地称为 GPL 或商业许可下的

"Oracle  JDK",但是,由于历史原因,尽管存在很小的差异,但我们将在 Oracle's OpenJDK

builds 和 Oracle JDK  中分别引用它们。

根据以上内容,我们可以知道 Oracle JDK builds 实际上包括了一个开源版本的 Oracle's OpenJDK

builds(基于 GPL 开源)和商业版本的Oracle JDK builds,但是因为其本身写法繁琐和对开发没有多

大作用,外界一般把他们粗略称为Open JDK和 Oracle JDK。

所以由此可知,Oracle JDK 实际上有几种含义:

  • 由 Oracle 公司推出的商业 JDK (最常用)
  • 由 Oracle 公司推出的 JDK (Oracle JDK builds下所有的 JDK)
  • Oracle JDK builds

在大部分情况下的 Oracle JDK 指的是 Oracle 公司推出的商业版 JDK。

Oracle JDK官网:Oracle | Cloud Applications and Cloud Platform

b. Oracle JDK 版本如何选择?

说到 Oracle JDK 该怎么选择 ,这就不得不提到 Oracle JDK 发布的众多版本了。

要是有兴趣可以去 Java发展历程 看看 Oracle JDK 到底有哪些版本。

截止目前:2021年5月4日,Oracle JDK一共有17个大版本。

在众多版本中如何选择适合的版本进行使用,就成了一个比较头痛的问题。

要想知道究竟哪个版本适合自己,就必须得先了解一下 Java SE 的发布节奏以及每个版本间的差

距。

ⅰ. Java SE 发布节奏以及不同版本的差距
1. Java SE 8 以及之前版本的发布节奏和不同版本的差距

根据 Java CPU and PSU Releases Explained里面的描述:

a. 发布的版本区别

CPU (Critical Patch Updates):关键补丁更新(CPU)包含对安全漏洞和关键错误的修复。

Oracle 强烈建议所有 Java SE 用户升级到最新的 CPU 版本。

Java SE CPU 版本是奇数版本

(即7u71、7u65–请参阅此处有关Java SE版本编号方案的更多信息)。

PSU (Patch Set Updates):

补丁集更新(PSU)包含相应 CPU 中的所有修复,以及其他非关键修复。

只有当您受到该版本中修复的其他错误之一的影响时,才应使用Java PSU版本。

Java SE PSU 版本是偶数版本,版本说明中列出了Java SE PSU 发行版中提供的其他修复程序。

PS:

  • Oracle 强烈建议所有 Java SE 用户升级到一个版本系列的最新 CPU 版本。大多数用户应该选择 CPU 版本。
  • 如果用户受到版本说明中所述的该版本中修复的其他错误之一的影响,则只能使用相应的 PSU 版本。
  • 随后的 CPU 版本将包含当前 PSU 的所有修复程序。
    因此,组织应在其环境中测试当前 PSU ,以预期这些修复将包含在下一个 CPU 中。
  • 从2014年10月开始,随着 Java SE 7u71(CPU)和 Java SE 7u72(PSU)的发布,Oracle 计划在 Java SE 7的每个 CPU 发布版本的同
    时,额外发布一个相应的 PSU 版本
b. 发布周期

Java 每两年发布一次,直到 Java 6于2006年12月23日在 Sun 下发布为止。

由于政治上的僵局,下一个版本是2011年7月28日发布的 Java 7。

在2012年3月7日于伦敦举行的 QCon 2012 大会上,前 Sun Microsystems 负责人、现任 Oracle

Java 产品经理

Simon Ritter 承诺 Java将回到两年的发布周期。

但在2013年4月18日时,Oracle 公司 Java Platform Group 首席架构师 Mark Reinhold 在博客中表

示:Oracle计划将 Java 8 的计划发布推迟到明年,理由是为了修复 Java 的安全漏洞。

c. 版本的关系

版本内的更新:例如:Java 8 > Java 8u20 > Java 8u40,大多是对一些安全漏洞的修复和小型功

能更新,版本间差距较小(除安全漏洞外)。

版本间的更新:例如:Java 6 > Java 7> Java 8,有较大修改、更新和安全漏洞修复,和传统版本

一样,每一个数字的变动都是一次巨大的改革,版本间差距巨大。

2. Java SE 9 以及之后版本的发布节奏和不同版本的差距

根据 Java Platform Group 产品管理高级总监 Donald Smith 在" Update and FAQ on the  Java SE

ReleaseCadence "中的描述以及Oracle Java SE Support Roadmap  的描述,提炼出我们需要的

部分:从 Java SE 9 开

始 Java 开启了一个新的版本控制和发布节奏模型。

a. 发布的版本区别

LTS版本(Long Term Support,长期支持版本),提供至少八年的商业支持(根据市场需要有可

能会延长),到期后会被新的 LTS 版本取代。

non-LTS版本(non Long Term Support,非长期支持版本),提供六个月的商业支持,到期后会

被新发布的版本取代。

b. 发布周期

整体发布周期为每六个月发布一版,其中:

LTS版本:每三年发布一版

non-LTS版本:每六个月发布一版

PS:

  • 当二者发布时间冲突时,优先发布LTS版本,non-LTS版本向后推迟一个周期。
c. 版本的关系

版本内的更新:例如:Java 11 > Java 11.0.1 > Java 11.0.2,大多是对一些安全漏洞的修复,版本

间差距几乎没有(除安全漏洞外)。

版本间的更新:例如:Java 9 > Java 10 >Java 11更接近于从 Java 8 > 8u20 > 8u40,每六个月发

布一次的 non-LTS 版本更像"主要版

本"的"功能发布",LTS版本更像是主要版本,而non-LTS版本更像是包含上一个LTS版本的测试版

本,版本间差距较大。

ⅱ. Oracle JDK收费吗?

知道了 Java SE 发布节奏以及不同版本的差距之后,最能影响人们做出选择的应该就是价格问题

了。没错了,Oracle JDK 也是要收费的,不过并不是所有版本都收费,也不是所有用途都收费。

从 Java 的历史版本中我们可以看到一个有趣的现象,Java SE 8 这个标题出现了两次,分别是

Java SE 8u202和之前版本和Java SE 8u211和之后的版本。

为什么会出现这个现象呢?

Java SE 8u201(CPU)/8u202(PSU)以及之前的版本使用的是 Binary Code License Java SE

8u211(CPU)/8u212(PSU)以及之后的版本使用的是 Java SE OTN License

因为这两个许可证有着巨大的区别,所以硬生生的把 Java SE 8 硬生生分成了两个部分,根据这两

个许可证长篇累牍的描述结合RednaxelaFX 在 Oracle 终于要向 Java 的非付费用户开枪了-怎么

看?和 采用java开发商业软件需要给Oracle付钱吗?两个问题的回答提炼出了几个要点。

许可证

免费学习

免费个人使用

免费开发

免费测试

免费商业功能

免费商业使用

免费在台式机/笔记本上使用

免费在服务器

上使用

免费嵌入式设备和其他计算环境上使用

Binary Code License

Java SE OTN License

-

PS:

  • 商业功能指的是 Oracle JDK 自带的 HotSpot VM 的启动参数中是否有  -XX:+UnlockCommercialFeatures,如果有 -XX:+UnlockCommercialFeatures  就代表启动了商业功能,这个功能默认是关闭状态,需要手动开启(在Java 11中被废除)。
  • Java Flight Recorder(JFR) 已经加入Open JDK 11,在Open JDK 11/bin下可以直接启动,或者在 HotSpot VM 的启动参数中加上
    -XX:StartFlightRecording。

采用 Binary Code License 的 Java 8u201/8u202及其之前的版本,个人使用和商用几乎都是免费

(不使用商业功能和嵌入式设备的情况下)。

采用 Java SE OTN License 的 Java 8u211/8u212及其之后的版本,个人使用免费,商用就要购买

许可证才可以(虽然可以偷偷商用,不过那种操作就跟裸奔过雷区一样,你也不知道啥时候会灰飞

烟灭,也不知道 Oracle 会不会等养肥了再宰)。

2. Open JDK

OpenJDK是一个开源的、免费的、可修改的Java开发工具包。

它是Java平台标准版(Java  SE)的一个开源实现,提供了Java开发所需的所有组件,包括编译

器、调试工具、运行时环境等。

OpenJDK的目的是通过开源社区的参与和协作,提高Java平台的质量和可维护性。

Open JDK官网:OpenJDK

3. OracleJDK & OpenJDK有哪些区别

a. 支持性不同

Oracle JDK 由 Oracle 提供技术支持,OpenJDK 由一个开源社区提供技术支持。

b. 商业授权不同

Oracle JDK 具有商业授权,而 OpenJDK 是完全开源的。

c. 可用性不同

Oracle JDK 是通过官方网站下载和购买的,OpenJDK 可以免费从多个网站下载。

d. 功能不同

在一般情况下,Oracle JDK 和 OpenJDK 都具有相同的功能。

但是,Oracle JDK 可能附带一些 Oracle 特定的工具和功能,而这些功能可能不存在于 OpenJDK 中。

e. 更新和版本不同

Oracle JDK 更新和版本的发布速度可能比 OpenJDK 快。

f. 安全不同

Oracle JDK 可能会在安全方面提供更多的保证,因为它是由资源丰富的公司提供的。

而 OpenJDK 可能存在安全漏洞,因为它是由一个开源社区维护的。

4. OpenJDK 和 OracleJDK 哪个jdk更好更稳定,正式项目用哪个呢?

1、Oracle JDK大概每6个月发行一次主要版本,而OpenJDK大概每三个月发布一次(但这也不是固定的)。

2、OpenJDK是一个参考模型并且是完全开源的,而Oracle JDK是OpenJDK的一个实现,并不是

完全开源的。

3、Oracle JDK比OpenJDK更稳定。Oracle JDK和OpenJDK的代码几乎相同。但Oracle JDK有更多的类和一些错误修复。

因此如果是开发企业或商业软件,建议选择Oracle JDK,因为它经过了彻底的测试和稳定。

某些情况下,有些人提到在使用OpenJDK遇到了许多应用程序崩溃的问题,此时,只需切换到

Oracle JDK就能解决问题。

在响应性和JVM性能方面,Oracle JDK与OpenJDK相比提供了更好的性能。

4、Oracle JDK不会为即将发布的版本提供长期支持,用户每次都必须通过更新到最新版本来获取

最新版本。

5、Oracle JDK使用BCL/OTN协议获得许可,而OpenJDK根据GPL v2许可获取许可。

总的来说,OracleJDK相比OpenJDK更稳定,正式项目用的是OracleJDK。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值