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

时间:2022-02-16 23:45:21

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

前言

你好,我是A哥(YourBatman)

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

JVM、JREJDK是口上最为常说的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 SE?生产环境装JDK还是JRE?

什么是Java技术?

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

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

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

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

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

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

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

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

JVM、JRE、JDK三者关系

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

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

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

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

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

JVM是什么?

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

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

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

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

值得注意的是,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 SE?生产环境装JDK还是JRE?

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

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

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

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

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这些工具截图给你,应该能看见不少眼熟的工具,不出意外也使用过不少吧。

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

虽然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是否需要付费,这里给出一张表格一目了然:

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

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

收费标准

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

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

桌面版:类似于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的下载

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

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

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

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

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

2、Oracle官网下载

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

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

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

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

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

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

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