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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

在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有关…

一个简单的可视化的A星自动寻路

一个简单的应用场景&#xff0c;流程图连线 源码&#xff1a; addExample("A星路径查找", function () {return {template: <div><div ref"main"></div></div>,data() { return {}; },computed: {},methods: {},mounted() {var c…

Python中的比较两个字符串

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在Python编程中&#xff0c;字符串比较是一项常见且关键的操作&#xff0c;涵盖了诸多方法和技巧。比较两个字符串是否相等、大小写是否一致&#xff0c;或者在一个字符串中寻找特定的子字符串&#xff0c;都是日…

征途漫漫:汽车MCU的国产替代往事

01.西雁东飞&#xff0c;南下创业 1985年&#xff0c;山东大学物理系毕业的周生明加入878厂&#xff08;“北霸天”&#xff09;参与MOS电路研发&#xff0c;随后几年&#xff0c;大洋彼岸的英特尔相继推出CPU 386\486、奔腾系列等产品。在摩尔定律的凸显、进口和走私的剧烈冲…

class067 二维动态规划【算法】

class067 二维动态规划 code1 64. 最小路径和 // 最小路径和 // 给定一个包含非负整数的 m x n 网格 grid // 请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 // 说明&#xff1a;每次只能向下或者向右移动一步。 // 测试链接 : https://leetcode…

<JavaEE> 经典设计模式之 -- 线程池

目录 一、线程池的概念 二、Java 标准库中的线程池类 2.1 ThreadPoolExecutor 类 2.1.1 corePoolSize 和 maximumPoolSize 2.1.2 keepAliveTime 和 unit 2.1.3 workQueue 2.1.4 threadFactory 2.1.5 handler 2.1.6 创建一个参数自定义的线程池 2.2 Executors 类 2.3…

go学习笔记(17)Blob and ArrayBuffer

最近在学习go websocket的时候&#xff0c;在学习实验过程遇到一个比较奇怪问题。为什么我的数据返回是blob&#xff0c;而不是arrayBuffer&#xff1f;百思不得其解。 直到同事打包的时候微信小游戏遇到了一个报错。FileReader不支持。 经过在社区查询&#xff0c;官方答复是…

[RoBERTa]论文实现:RoBERTa: A Robustly Optimized BERT Pretraining Approach

文章目录 一、完整代码二、论文解读2.1 模型架构2.2 参数设置2.3 数据2.4 评估 三、对比四、整体总结 论文&#xff1a;RoBERTa&#xff1a;A Robustly Optimized BERT Pretraining Approach 作者&#xff1a;Yinhan Liu, Myle Ott, Naman Goyal, Jingfei Du, Mandar Joshi, Da…

P10 Linux进程编程 fork创建子进程

目录 前言 01 fork()创建子进程 示例 1使用 fork()创建子进程。 02 fork创建新进程时发生了什么事&#xff1f; 2.1 父、子进程中对应的文件描述符指向了相同的文件表 前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《Linux C应用编程&#xf…

异步回调模式

异步回调 所谓异步回调&#xff0c;本质上就是多线程中线程的通信&#xff0c;如今很多业务系统中&#xff0c;某个业务或者功能调用多个外部接口&#xff0c;通常这种调用就是异步的调用。如何得到这些异步调用的结果自然也就很重要了。 Callable、Future、FutureTask publi…