Java发展史

Java发展史

Java历史的几个重要节点:

  • 1990,Sun公司启动了一个名为“绿色计划”的项目,由James Gosling等领导,目标是开发一种可以在机顶盒等消费性电子产品上运行的程序架构。这个计划产生了Java的前身:Oak,随着1995年互联网的兴起,Oak找到了适合自己的发展方向并最终蜕变成Java。
  • 1995年5月23日,Oak正式改名为Java,Java也第一次提出来**“一次编译,到处运行”(Write Once, Run Anywhere)**的口号。
  • 1996年1月23日,JDK 1.0发布,Java语言有了第一个正式版本的运行环境。
  • 1998年12月4日,Sun公司将Java技术体系分为三个方向:面向桌面应用开发的J2SE(Java 2 Platform, Standard Edition)、面向企业级开发的J2EE(Java 2 Platform, Enterprise Edition)、面向机顶盒等移动终端开发的J2ME(Java 2 Platform, Micro Edition)。
  • 2004年9月30日,Sun公司放弃了“JDK 1.x”的命名方式,将版本号修改为“JDK x”,并且发布了JDK 5。
  • 2006年11月13日,Sun公司在Java One大会上宣布要将Java开源。在随后的一年多里,Sun公司陆续将JDK各个部分的源码在GPL v2协议下公开,并建立了OpenJDK组织独立管理这些源码。
  • 2006年12月11日,JDK 6发布,从这个版本开始,J2SE、J2EE、J2EE的命名方式被Java EE、 Java SE、 Java ME代替。
  • 2009年4月20日,Oracle正式收购Sun公司,Java商标也随之归Oracle所有(Java语言本身由JCP组织进行管理,并不属于某家公司所有)。
  • 2017年,JDK 9发布。并且,Oracle宣布以后将会在每年的3月和9月各发布一个JDK的大版本,另外,每六个大版本中才会被划分出一个长期支持(Long Term Support)版本。只有LTS版的JDK才可以获得长期的支持和更新,普通版本的JDK只有六个月的生命周期。目前,有4个LTS版本:JDK 8、 JDK 11、 JDK 17、 JDK21
  • 2018年3月,Oracle宣布“按计划报废”Java EE(包含JDBC、Servlet等基础组件),将所有权赠送给Eclipse基金会,且Java EE不准再使用Java的商标,取而代之的是Jakarta EE
  • 2018年9月25日,JDK 11发布,同时Oracle宣布以后将会同时发行两个JDK:一个是在GPL v2+CE协议下由Oracle发行的OpenJDK,一个是在OTN协议下发行的OracleJDK。这两个JDK共享绝大部分代码,在功能上几乎一样。OpenJDK可以免费在开发、测试以及生产环境下使用,但只有半年时间的更新支持;OracleJDK仅允许少数的免费使用场景,若在生产环境中商用就必须收费,且有长期的更新支持。一些公司会在OpenJDK的基础上开发自己的JDK,如阿里巴巴的Dragonwell,OpenJDK的管理以及维护目前由RetHat负责。

注:

  • JavaSE、JaveEE、JavaME三者之间的关系

    • JavaSE是基础,面向桌面级应用(如Windows应用),提供了核心库和语言特性
    • JavaEE扩展了JavaSE,面向服务端的Web应用,针对企业级应用开发提供了更多的功能和组件,如javax.servlet.*等
    • JavaME专注于嵌入式设备和移动设备的应用开发,提供了轻量级的运行时环境和API,如javax.microedition.io.*等

    (Android APP开发也使用了Java,但并不是Java ME开发)

Java三个技术体系的关系

  • 4个LTS版本更新支持结束时间分别为
LTS版本支持结束时间
JDK 82030年12月
JDK 112032年1月
JDK 172024年9月
JDK 212026年9月
  • OpenJDK

    OpenJDK以及OracleJDK之间具体的历史关系,可以参考博客。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/210160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java八股文面试全套真题【含答案】-XML篇

XML 是什么?它的全称是什么? 答案:XML(可扩展标记语言)是一种用于描述数据的标记语言,用于存储和交换结构化的信息。XML 的全称是 eXtensible Markup Language。XML 和 HTML 有什么区别? 答案&a…

看图学源码 之 ConcurrentHashMap put、get、remove、clear、扩容等相关方法的源码分析

ConcurrentHashMap 引入 HashMap 的弊端 多线程下是不安全的,是有死循环的 JDK1.7 的时候会使用头插法将新的节点增加到头部,那么就会造成链表翻转成为了闭环,就是所谓的死循环。 JDK1.8之后使用的是尾插法,因此不会造成环形链…

京东数据运营:京东API接口有哪些?京东数据如何采集调用?

市场分析对于电商品牌来说非常重要,它可以帮助电商品牌更好地理解市场,把握市场机会,以及制定有效的产品定价、产品营销策略等等。 结合市场中可以帮助品牌方做市场分析的电商数据分析工具——鲸参谋电商数据分析平台,我们一起具体…

在Mac上安装Windows应用程序的简便方法:CrossOver for Mac

对于许多Mac用户来说,有时候他们可能需要使用一些只有在Windows上才能找到的应用程序。以前,解决这个问题的方法是通过安装Windows虚拟机或使用双系统来在Mac上运行Windows应用程序。但这些方法需要额外的硬件资源和时间来配置,并且可能会导致…

IOT安全学习路标

1. 物联网基础知识 首先,你需要建立坚实的物联网基础知识,包括IoT的架构和组件,传感器和设备的连接和通信技术,云端和边缘计算等。 2. 通信和网络安全 学习关于物联网通信和网络安全的基础知识,包括加密和认证技术、…

通俗解释一下“强静态类型”

我写软件已经有 20 多年了,随着时间的推移,我越来越确信强静态类型不仅是一个好主意,而且几乎总是正确的选择。 非类型化语言(或语言变体)肯定有用途,例如,当使用 REPL 时,或者在已经无可救药的无类型环境(…

有什么进销存软件能对接微信小程序?

有什么进销存软件能对接微信小程序? 据我所知,很多进销存软件都有配套的微信小程序吧。 以我们现在用的这个为例,这也是同行推荐过来的,很好用,而且性价比很高—— 在线平台,无需下载APP,搭载…

C语言实战演练之跳动的爱心C语言版

跳 动 的 爱 心 - LOVE - 完整程序 #include <stdio.h> #include <math.h> #include <windows.h> #include <tchar.h> float f(float x, float y, float z) {float a x * x 9.0f / 4.0f * y * y z * z - 1;return a * a * a - x * x * z * z …

ELK简单介绍一

任务背景 运维人员需要对系统和业务日志进行精准把控&#xff0c;便于分析系统和业务状态。日志分布在不同的服务器上&#xff0c;传统的使用传统的方法依次登录每台服务器查看日志&#xff0c;既繁琐又效率低下。所以我们需要集中化的日志管理工具将位于不同服务器上的日志收…

蓝桥杯日期问题

蓝桥杯其他真题点这里&#x1f448; 注意日期合法的判断 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public class Main{static int[] days {0,31,28,31,30,31,30,31,31,30,31,30,31};static BufferedReader in new Buf…

【核心重点】Flink四大基石

1. Time&#xff08;时间机制&#xff09; 时间概念 处理时间&#xff1a;执行具体操作时的机器时间&#xff08;例如 Java的 System.currentTimeMillis()) &#xff09;事件时间&#xff1a;数据本身携带的时间&#xff0c;事件产生时的时间。摄入时间&#xff1a;数据进入 …

linux vim 基础设置-自动填充文件头

前言 当前为vimrc脚本设置&#xff0c;脚本位置在 ~/.vimrc or /etc/vimrc 当前为首次打开 C C Shell 文件&#xff0c;自动填充对应文件头信息&#xff0c;再次打开时会修改对应时间信息 :set nu "显示行号 :set hlsearch "搜索时 高亮"新建 .c .cpp .sh文件&a…

理解Go语言中的defer

引言 Go有许多在其他编程语言中可以找到的常见控制流关键字,例如if、switch、for等。defer是其他大多数编程语言中没有的关键字,尽管它不太常见,但你很快就会看到它在你的程序中有多么有用。 defer语句的主要用途之一是清理资源,例如打开的文件,网络连接和数据库句柄。在…

在AWS Lambda上部署EC2编译的FFmpeg工具——自定义层的方案

大纲 1 确定Lambda运行时环境1.1 Lambda系统、镜像、内核版本1.2 运行时1.2.1 Python1.2.2 Java 2 环境准备2.1 创建EC2实例 3 编译FFmpeg3.1 连接EC2 4 编译5 上传S3存储桶5.1 创建S3桶5.2 创建IAM策略5.3 创建IAM角色5.4 EC2关联角色5.5 修改桶策略5.6 打包并上传 6 创建Lamb…

智能优化算法应用:基于海鸥算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于海鸥算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于海鸥算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.海鸥算法4.实验参数设定5.算法结果6.参考文献7.MA…

【nuxt3】cannot read preperties of null (reading ‘$nuxt‘)

问题描述 vue3 中&#xff0c;通过 createVNode 创建子组件实例时&#xff0c;发现子组件无法获取到父组件中的 router、store 信息&#xff0c;一旦子组件使用就会报错。 问题原因 通过控制台断点调试&#xff0c;发现时 appContext 值为空导致的。怀疑是创建子组件的时候&a…

海外地区开启IPV6无法访问服务器问题

前言 最近有海外地区的用户反馈无法访问公司的网络&#xff0c;无法下载应用和系统进行升级。了解到浏览器可以正常访问公司域名&#xff0c;谷歌&#xff0c;油管等都能正常使用。日志分析GET请求服务器数据时没有得到应答&#xff0c;最终查询网络相关修改确认与网络IPV6有关…

掌握游戏开发的全方位知识:这些内容你一定要知道

游戏开发是一项涉及多学科的综合性工作&#xff0c;从游戏设计到编程、美术、音频、测试等多个方面都需要开发者具备广泛的知识。以下是进行游戏开发时需要掌握的主要知识领域。 首先&#xff0c;游戏设计是整个过程的基石。这包括游戏机制和玩法设计、关卡设计、用户界面&…

表示你的shell未被正确配置以使用conda activate--换成清华源anaconda

1 CommandNotFoundError: Your shell has not been properly configured to use conda activate. If using conda activate from a batch script, change your invocation to CALL conda.bat activate.To initialize your shell, run$ conda init <SHELL_NAME>这个错误提…

uniapp-获取手机型号

要获取当前设备的手机型号&#xff0c;您可以使用uni-app提供的uni.getSystemInfo() API来实现此目的。 代码示例&#xff1a; uni.getSystemInfo({success: function(res) {console.log("手机型号&#xff1a;" res.platform)} })该方法会返回一个包含设备信息的…