什么是Java SE?生产环境装JDK还是JRE?

开发 后端
JVM、JRE、JDK是口上最为常说的J系列缩略语,那么JDK 8和Java 8是一回事吗?还有Java SE 8有时候着实分不清道不明。含糊其辞难免会让”他人“觉得不专业,本文就花上几分钟来了解了解。

[[412998]]

前言

你好,我是A哥(YourBatman)

上篇文章搞完什么是Java EE意犹未尽,在敦促之下一口气把Java SE也拿下。如果说搞Java EE是在炒冷饭,但Java SE必定是永恒。

JVM、JRE、JDK是口上最为常说的J系列缩略语,那么JDK 8和Java 8是一回事吗?还有Java SE 8有时候着实分不清道不明。含糊其辞难免会让”他人“觉得不专业,本文就花上几分钟来了解了解。

所属专栏

  • BATutopia-Java EE

相关下载

  • Java EE工程源代码:https://github.com/yourbatman/BATutopia-java-ee
  • JSR-JCP工程源代码:https://github.com/yourbatman/JSR-JCP
  • JSR文件网盘下载:https://wangpan.yourbatman.cn/s/nRtq 密码:jsrjcp

版本约定

  • Java SE 8(非Open JDK)

正文

什么是Java技术?

Java技术既是一种编程语言,又是一种平台。Java语言的主要特性有:

  • 简单
  • 面向对象
  • 分布式
  • 多线程
  • 高性能(编译型非解释型)
  • 健壮性强
  • 安全

在Java编程语言中,所有源代码首先以.Java扩展名结尾的纯文本文件编写。这些源文件由javac编译器编译成.class文件,.class文件不包含处理器本机代码(也就是说和本机OS无关)。而是包含字节码 -> JVM的机器语言,然后.class是运行于特定的JVM虚拟机上的。

由于不同的操作系统上都有各自对应平台的JVM,所以一份Java代码(一份.class字节码)可以运行在不同的操作系统上,实现跨平台的目的。正所谓Java是跨平台的语言,JVM是跨语言的平台。

API和Java虚拟机将程序与底层硬件隔离开来,做到程序无关性。

JVM、JRE、JDK三者关系

其实这个问题的答案,官方早已非常准确的给了答案,可能鲜有人关注。这里我就把它强调出来,一切都源自官方出品的张图:

这张图是不是清清楚楚、明明白白的告知了JVM、JRE、JDK三者的关系?咱们把这个关系简化一下:

一目了然了吧,它们哥弎是一种包含关系。

JVM是什么?

Java Virtual Machine:Java虚拟机。负责支持的Java应用程序的执行,是让Java实现一处编写,到处运行的保证。

起初JVM仅作为Java语言的运行时环境,现在它俨然发展为一个平台,能够支持多种语言的运行如Kotlin、Groove

每个操作系统(Windows、Linux、Mac OS)都有自己的JVM实现,屏蔽掉应用程序对底层OS的感知,方可让Java具有跨平台的能力。

值得注意的是,JVM是一种规范,从而允许不同厂商实现自己的JVM。当然Sun/Oracle官方自己也有,那便是Hotspot虚拟机。它是Sun JDK和OpenJDK中所自带的虚拟机,也是使用范围最广的Java虚拟机。

除此之外比较著名的还有IBM的J9 VM、安卓上的KVM、微软的Microsoft JVM、Oracle的JRockit VM(现已和Hotspot合并)...

我们熟悉的CMS、G1、ZGC都属于官方的垃圾回收算法,是JVM核心性能指标

JRE是什么?

Java Runtime Environment:Java运行时环境。为Java程序有效运行的工具(环境),同样的,它和底层OS系统版本绑定。我们常见的那些API都在这里,比如rt.jar,比如这些包名:

Java是一门偏向保守的语言,因此JRE在向后兼容性方便一直都非常谨慎,保持得都非常非常非常好。基于此呢,可以看到官方总是建议你升级到最新版本,以获取更好的性能表现、安全表现。你看Java SE都已经发布到16/17版本了,但:你发任你发,我用Java 8。

Sun官方对JRE是提供了单独下载的,如果只是想运行一个已编辑/打包好的Java程序,使用JRE就够了。它的体积更小,下载安装起来更便捷。体积上差异不小啊:“以Java SE 8u291版本为例:JRE仅87m,而对应的JDK高达271m,3倍有余”

JDK是什么?

Java Development Kit:Java开发工具包,它包含有JRE。新手注意了这是知识点:若安装了JDK,无需再额外安装JRE。

可认为JDK它是JRE的扩展,为方便开发人员开发Java程序的工具包。包含有编译器javac、Javadoc工具、debugger断点调试工具、javap反编译工具等,还有更多,看官网就清楚了:https://docs.oracle.com/javase/8/docs/technotes/tools

为了方便阅读,这里我把JDK这些工具截图给你,应该能看见不少眼熟的工具,不出意外也使用过不少吧。

虽然JDK提供了非常多好用的工具,但如今我们开发人员似乎使用得越来越少,这也是为何你看到上图还是很陌生的原因。

JDK的这些工具,“替代品”大都可完成,如:

  • 使用Maven/Gradle来完成自动编译(底层可以是Javac或者eclipse的jdt)
  • 使用IDE集成开发工具完成自动编译(如IDEA、Eclipse等)
  • 使用IDE来debug调试程序(如IDEA、Eclipse等)
  • 使用IDE来查看运行时内存信息(如IDEA)
  • ...

总之,集成开发环境IDE越来越强大,使得开发者可通过图形化界面直接操作从而提升效率,间接的就是JDK的工具就被使用得越来越少了。这并非一个“好消息”,因为在脱离了IDE的场景下依旧还得原生的工具出马,比如线上部署环境。

生产环境应该安装JDK还是JRE?

一般来讲,线上环境只会扔一个jar/war包(或者一个制品库)上去直接运行,不可能在上面调试更不可能编码,所以使用更加轻量级的JRE更合适?

非也非也!生产环境应该安装JDK而非JRE!!! 理由如下:

1.JDK是JRE的超集,功能只多不少

2.JDK相较于JRE的劣势是安装时间长点、占用硬盘空间大点。但相比之下这根本都不算劣势

  • JDK仅需安装一次,时间再长都能接受
  • 占用硬盘空间大这个,额,不说了

3.JDK提供不少顺手的工具集,如:jmap、jstack、jinfo、jps等等,相信有经验的程序员同学对这些“实用小工具”不陌生

4.JDK有编译器,能实现“动态编译”的能力

想想当年流行的JSP文件,它是在运行期间首次访问时通过JSP->Servlet->.class文件有的.java文件是通过网络动态读取的,这个时候也需要运行期间的试试编译能力

那么单独的JRE就没有用武之地了吗?当然有,桌面端程序就是典型的例子。比如Java程序员最常用的IntelliJ IDEA它就自带JRE喽(桌面端程序完全没必要安装JDK嘛),当然还有Eclipse(旧版Eclipse必须依赖于本机的JRE环境才能运行,新版已经和IDEA一样把环境内置了)。

Oracle的JDK的是免费的吗?

答:不是。

可能你早就听闻过Oracle对JDK要开始收费,时间拨回到2019年4月份,Oracle发布了JDK 8的两个更新补丁:8u211和8u212,记住这两个特殊的版本。

作为小版本功能上肯定并无多少变化,重点在于:新版本的许可协议从BCL换成了OTN,也就是说你将不能在生产环境使用新版/更新版 JDK,若要使用就必须付费了。嗯,这很Oracle:先收购,再收费。

BCL vs OTN许可协议

BCL许可协议:Oracle Binary Code License Agreement for the Java SE Platform Products and JavaFX(Java SE平台产品和JavaFX的Oracle二进制代码许可协议)。简而言之:它是一种开放协议,只要你同意此协议就可以使用它,无需费用。除了不能修改它外,私用和商用都可以。

OTN许可协议:Oracle Technology Network License Agreement for Oracle Java SE(针对Oracle Java SE的Oracle技术网络许可协议)。简而言之:它是一种商业授权协议,必须付费授权后才能商用(私用免费),否则...

为了方便查找到自己当前使用的JDK是否需要付费,这里给出一张表格一目了然:

嘿嘿,默默的查看自己服务器上的JDK版本,中招了吗?

收费标准

既然JDK开始收费,那到底贵不贵呢?来看看现在的收费标准:

桌面版:类似于windows一人一份,按设备数/人头数来计算。每人200元/年样子(若人数超过5万人,联系Oracle的销售代表有更大优惠)服务器版:用于服务器、云计算等。按照机器数量来计算,每台2000元/年样子(若数量超过2w台,联系Oracle的销售代表有更大优惠)

也许你会觉得奇怪:也没见个人/自己公司为此付过费呀,怎么肥四?答:这是因为你在天朝,就像你为windows付过费么?

大企业、国企、央企除外...

当然,不使用Oracle的JDK并不是不能做Java开发了,还有Open JDK嘛。比如流行的就有:

  • 阿里巴巴的dragonwell
  • Amazon的Corrett
  • 华为的毕昇JDK
  • 腾讯的Kona
  • IBM的JDK
  • ...

附:Oracle JDK的下载方式

这完全是献给刚学Java的初学者的,但不瞒你说,随着Oracle改变了JDK的下载方式(隐藏较深、需要登录等等),不止一次遇到工作N年的同事下个JDK搞了半天(真实的半天哦)。

1、Java官网下载

这里指的是鼎鼎大名的域名java.com,也叫Java 官网。拥有这么nx的域名,现在貌似只做着一件事:提供JRE的下载

下载页面地址:https://www.java.com/zh-CN/download特点:

  • 无需登录,下载十分便捷
  • 只能下载JRE 8版本(毕竟8现在依旧是主流),更新的下载不了
  • 只能下载JRE,并不能下载到JDK(倘若这里直接能下载到JDK的话,那应该没Oracle官网什么事了)

小细节:实际仍是从oracle服务器下载的文件

2、Oracle官网下载

根正苗红,最具权威性,是Java开发者首选的下载JDK方式。这里可以下载Java 16、Java 11、Java 8、Java 7等所有版本,这里以Java 8为例:

当然下载的时候依旧少不了“大字报”提示你记得付费:

下载页面:https://www.oracle.com/cn/java/technologies/javase-downloads.html特点:

  • 需要登录,方可下载(也就是说必须有Oracle账户且登录了才行)
  • 可下载到所有版本的JDK、JRE

小细节:从java.com上下载到的jre与oracle官网下载到的是同一个文件(文件名、大小均相同),但下载地址稍有差别哦(估计是为了区分:一个需要登录,一个不需要登录吧😄)

3、BAT网盘下载

不限速下载,去除干扰精确定位,推荐使用,推荐使用。

下载页面:https://wangpan.yourbatman.cn/s/rEH0 密码:javakit 特点:

  • 无需登录,即可直接下载
  • 国内服务器,并且,不限速,不限速,不限速
  • 可下载到最新的JRE、JDK、IDEA、Datagrid等常用开发工具,不限速哦

还不用说下载速度(下载速度一般10倍于上传速度),我只附上我的一张上传速度截图,就知道这个下载体验能有多么的酸爽了:

另:BAT网盘拥有强大不限速、存储任何(包括种子)的特性,现开放注册哦,详见这篇文章:每人送1G超小容量,“BAT网盘”免费助你做减法

4、“其它软件平台”下载

从什么天空软件、多特软件、CSDN里下载,极不推荐!

总结

本文又算得上一篇合格的科普文,这些基础知识就像我们小时候背的古诗词一样,是基础中的基础,多了解一些交谈起来能更显得专业,特别是热衷做培训的,专业性可以更强点。

 

责任编辑:姜华 来源: BAT的乌托邦
相关推荐

2022-02-16 22:50:28

JVMJDKJRE

2022-12-30 16:06:23

JDKJREJVM

2009-09-09 10:23:27

JDK 5Java SE 6

2009-07-08 18:07:58

jvm jre

2009-07-08 17:59:51

JDK JRE

2023-09-27 08:46:44

Java 技术编程语言

2009-07-08 10:41:54

JDK JRE JVM

2009-06-25 14:46:50

JDKJREJVM

2010-09-25 14:58:12

JVMJDKJRE

2010-09-27 14:50:22

JDKJREJVM

2009-07-09 13:44:12

JDK JRE

2009-07-08 09:47:47

安装JDKJREJVM

2019-07-24 10:11:51

jdkjreJava

2009-07-07 12:48:29

JDK环境变量设置

2022-09-28 18:16:34

JavaJDK

2015-08-06 21:01:37

移动

2022-12-08 10:35:25

2010-01-04 16:19:15

Ubuntu JDK

2010-02-25 13:58:22

Linux JDK

2009-07-08 10:23:29

点赞
收藏

51CTO技术栈公众号