前言
你好,我是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官网下载到的是同一个文件(文件名、大小均相同),但下载地址稍有差别哦(估计是为了区分:一个需要登录,一个不需要登录吧