Java 概述

Java最早是由SUN公司(Stanford University Network)的詹姆斯·高斯林(人称Java之父)在上个世纪90年代初开发的一种编程语言,最初被命名为Oak(橡树), 目标是针对小型家电设备的嵌入式应用, 然而市场没什么反响。 此时互联网崛起, 让Oak重新焕发了生机, 于是SUN公司改造了Oak, 在1995年以Java的名称正式发布(申请注册商标时,发现Oak已经被人使用了,当时他们正在咖啡馆喝Java咖啡,有一个人灵机一动说就叫Java怎样,这个提议得到了其他人的赞同。最终Oak语言改名为Java)。

Sun公司从1982年成立到2000年达到顶峰用了近二十年时间,然而最后在2009年4月20日被甲骨文公司(Oracle)74亿美元收购结局。

Java是一种介于编译型语言和解释型语言之间的语言。 编译型语言以C、 C++为代表, 代码是直接编译成机器码执行, 但是不同硬件平台(x86、 ARM等)CPU的指令集不同, 因此, 跨平台时就需要针对目标平台编译对应的机器码。 解释型语言以Python、 Shell等为代表, 可以由解释器直接加载源代码运行, 但是执行效率低。 而Java则是介于两者之间,它先将代码编译成一种“字节码”, 这是一种抽象出来的二进制操作指令, 然后由虚拟机加载字节码并执行这些操作指令。而虚拟机则是由C++语言开发,不同平台编译出不同的虚拟机, 但这些虚拟机都执行同一种字节码,这样就实现了Java宣称的口号:“一次编写, 到处运行”的效果。

SUN给Java分出了三个不同版本

  • Java SE: 即Java标准版(Standard Edition,亦简称J2SE),包含标准的JVM和标准库
  • Java EE: 即Java企业版(Enterprise Edition,亦简称J2EE),仅在Java SE的基础上加上了大量的API和库, 用以开发Web应用、 数据库等, 使用用与Java SE完全相同的虚拟机
  • Java ME: 即Java微型版(Micro Edition,亦简称J2ME ) ,它是一个针对嵌入式设备的精简版,Java SE的标准库无法在ME上使用。早年间曾在功能机上大量使用过

关系图

Java 版本历史

关于jre、jdk与jvm

jre,也就是 Java 运行环境,包含了 jvm和 Java 类库,以及一些模块等。而 jdk可以看作是 jre的一个超集,提供了更多工具,比如编译器、各种诊断工具等。因此,如果我们只是需要运行Java程序,下载一个jre即可,如果我们是要开发Java程序,则需要下载jdk。

另外,jvm作为一个平台,不仅仅只有 Java 语言可以运行在 JVM 上,本质上合乎规范的字节码都可以运行,Java 语言自身也为此提供了便利,我们可以看到类似 Scala、Groovy、JRuby、Jython 、Kotlin等大量 JVM 语言的出现。

同时,需要了解,Java的虚拟机有十几种不同的开源实现版本,官方的版本是Sun公司的HotSpot ,后由Oracle接手。关于Java虚拟机的实现介绍,可以参阅维基百科中的一个JVM列表,以下是维基百科中仍处于活跃的实现,更多不活跃的查看 List of Java virtual machines

  • Azul Zulu :是Azul Systems支持的OpenJDK构建,并符合Java SE 11、8、7和6标准
  • Codename One :使用开源ParparVM
  • Eclipse OpenJ9 :从IBM J9开源,适用于Windows,AIX,Linux(x86,Power和Z),macOS,MVS,OS/400,Pocket PC,z/OS
  • GraalVM :基于HotSpot/OpenJDK,它具有多语言功能,可以透明地混合和匹配支持的语言
  • HotSpot :Oracle的开源Java VM实现
  • JamVM:与其他虚拟机相比,已发展成为一个非常小的虚拟机。设计为使用GNU Classpath。支持几种架构。GPL。
  • Jikes RVM:(Jikes研究虚拟机)—研究项目。PPCIA-32。支持Apache Harmony和GNU Classpath库。Eclipse公共许可证
  • leJOS :机器人套件,是Lego Mindstorms可编程积木的固件替代产品,为Lego Mindstorms RCX和NXT机器人提供了Java编程环境
  • Maxine :甲骨文实验室和曼彻斯特大学的元循环开源研究虚拟机
  • JVM.go:一个用Go编写的JVM

对于安卓开发者,需要对谷歌曾经实现的Java虚拟机Dalvik有所了解。Android系统上的Java运行环境和桌面上是完全不同的,具体细节将在Android开发基础中说明。


公众号“编程之路从0到1”

20190301102949549

Copyright © Arcticfox 2021 all right reserved,powered by Gitbook文档修订于: 2022-05-01 12:20:20

results matching ""

    No results matching ""