01 Java的历史与演进
在 1990 年代初期,FORTRAN、COBOL、Pascal、C++ 和 Visual Basic 等几十种非常稳定的编程语言,Windows、Mac、Unix、Linux 和移动平台等许多平台都需要统一的设计方法。
James Gosling 和他的朋友们在他办公室附近的一棵橡树(Oak)下讨论了这些方面,他们觉得应该开发一种新的编程语言来解决这些差异。 他们在开发一种名为 Oak 的新语言时对基础知识很挑剔,后来将其命名为 Green(因为团队被命名为 Green)和后来的 Java(基于他们最喜欢的印度尼西亚咖啡,称为 Java 咖啡)。
James Gosling 于 1995 年推出了 Java,那段时间还有其他语言 C、C++、VC++、Visual Basic、Python 都有自己的市场、开发人员和部署。 Java 带来了 WORA(一次编写,随处运行)、简单、面向对象编程的概念,并消除了 C++ 的所有痛点。 最重要的是具有 Applet 支持和 Enrich UI 设计(抽象窗口工具包)的 Web 编程。
由于其简单性,它吸引了更多的开发人员,并成为所有开发人员在 1998-2001 年间进入国际公司(美国、英国)工作的“通行证”。 但与此同时,在 2001 年期间,Dotcom 裁掉了很多工作岗位,并增加了新的 Java 开发人员。
但后期在RMI之上使用JSP、Servlet和中间层架构EJB,在Web编程中引入更多的特性,将为JAVA的企业应用空间带来更多的思考。 为了进入移动应用领域,Java也引入了移动编程,从而引入了J2ME。 于是,Java提出了J2SE、J2ME和J2EE。
但是他们都使用CORE-JAVA作为基础语言。 Java 还与 IBM 合作开发了 Java Sound Library; Java Media Framework 与 Java 运行时相结合,以及 IBM 语音合成语音的未来对于媒体和教育领域的人们来说是另一个伟大的里程碑。
随着时间的推移,Java 在引入 JUG 的同时增加了开发人员的数量。 Java 错误跟踪和错误报告做得很好。
由于它的简单和强大,更多的部署,在接下来的几年里增长显着,并将 C++、VC++、Visual Basic 赶出市场,在开发者社区中领先 5-6 年,它甚至将 Python 语言定为并带来了 JavaScript Web 编程(在 CSS+HTML 之上的动态支持)等特性。
Java变种众多,可以与新推出的GO、RUBY、SCALA等竞争,也可以占领自己的市场。
02 Java基石
Green 的团队在 Java 编程语言的初始构想中规划的基础是这样的,Java 编程语言的基本模块是:
▲图:Java历史与发展时间线
~tplv-k3u1fbpfcp-watermark.image
有了这些正确而强大的基本块,Java 在采用现代编程语言的新变化时仍然不做任何妥协,例如 Lambda 表达式、Switch 表达式和封闭类。 这么多新的编程框架,包括Hadoop和很多大数据框架,云函数都使用Java作为原生工具。 这就是为什么,25 年后,Java 仍在与 Scala、Go 和 Python 等新时代编程语言作斗争。
03 从Sun到Oracle的转型
Sun 被 Oracle 收购,所以他们从 2010 年开始接管 Java。Oracle 将 Java 的版本控制从 1-2 年增加到 6 个月。 这导致了巨大的变化和新功能的增加。 Java 8 是那些吸引开发人员并重新夺回市场份额的非凡版本之一。 即使甲骨文公司推出了 Java 14,对于所有开发者来说,仍然使用更稳定的 J2SE 1.8 版本来维护他们的部署。
▲图:Java框架热力图
~tplv-k3u1fbpfcp-watermark.image
甲骨文接手Java后,人们开始思考开源的思路,开始以Sun的J2SE(OpenJDK)和甲骨文的J2EE JAKARTA Eclipse社区基础项目的名义支持J2EE开放。
Java广泛应用于各个领域,无论是制造业、零售业、银行业还是电信业,Java语言都是必不可少的,每个开发者都应该了解Java。 因此,它在全球范围内为该行业创造了更多机会。 2006-2013年期间,甲骨文公司遇到困难。
但是,在Oracle接管了Java之后,这个速度或者说开发/部署已经完全被淘汰了。 Sun Microsystems 举办了一次 Java ONE 会议,每次发布都是一场全球性的技术讨论,与更多的技术观众讨论和辩论关于 Java 的整个新生事物(新特性、未来的 JSR)。
正如我们所讨论的java字符串加密,Java 在微控制器和微空间项目中也占有一席之地。 Java 带来的亮点和转变之一是 Java 嵌入式系统功能,该功能处理使用网络的设备和设备的远程管理。 我觉得这是最近引入物联网 (IoT) 的基础,但早在 2006-2010 年就已经考虑过 Java。
Oracle 带来的第一个重大变化是 Java 以两种形式发布:
Java 的开发平台称为 OpenJDK。
企业使用的商业平台称为Oracle Java。
04 基于Java平台的框架
作为Java入门,大家可以自由的去看看世界上更多的语言,比如GO、Python、Ruby、PERL等,以及它们的市场空间。 Java 已用于客户端或两层应用程序(Applet、JavaScript)、服务器层(JSP、Servlet)、中间层(EJB)和 N 层(EMAIL、JNDI、JDBC 等)。
它还帮助 Sun 和 Oracle 在 Java 的成长过程中增加了他们的开发人员和贡献者。 Java 在 Spring、Hibernate 等第三方框架中大量使用,并支持跨数据库和动态/运行时依赖注入。
除此之外,随着下一代编程语言的转变,单体世界也向微服务世界转变,为业务和市场带来更多的稳定性、可扩展性和敏捷性。 Java 用于所有基于 SpringBoot 的微服务容器,并且再次拥有一流的程序员、经过验证的部署等。
我忘了提另一个特性,所谓的多语言支持,其中 Java 支持 UNICODE 以实现跨语言(国际)支持。 Java在大数据领域的应用,目标非常广泛,有更多的用例、解决方案和部署。 Java 也正在转向基于云的平台部署,从而使更多的开发人员能够通过满足热门的市场需求来为 Java 做出贡献和工作。
Java 被广泛使用并集成到各个领域、技术、工具集,增加了 Java 的利用率,从太空、卫星研究到制造、教育、银行、金融、移动、云等。Java 已成功与以下第三方集成-派对工具和技术。 Java更广泛地融合了AI、ML、Cloud等,并在性能上取得了稳定和持续的提升。
25 年来,Java 一直被 Python、C++、Scala、GO、Erlang 等多种语言所忽视。尽管如此,Java 仍然排名第一,拥有更多的社区成员和稳定的部署以及大量的用例。
Java和其他第三方框架的集成,从Hibernate到Struts,到现在,SpringBoot微服务框架也被全球采用和部署。 响应式 Java 变得越来越流行,并提供了比响应式编程语言更多的选择。
这些集成将 Java 带到了编程世界的下一个层次,其中性能和稳定性是 Java 成功属性的关键部分。 甲骨文公司也宣布了他们发布的许多新变化; 它不是每两年发布一次 Java,而是每六个月发布一次。
此外,还添加了一个新网站以查看即将开展的项目或目前已完成的任务的功能。 伴随着Java 25年历程的成功里程碑,还有一些重要的里程碑,比如JDK8获得海量部署等等。 就此功能而言,开发人员可能期望 JVM 提供更多速度和性能改进,以及处理大量并发用例的容错能力。
05 最近Java平台面临的困境
虽然 Sun 有 Java,但还有其他 Java 运行时环境,并且已经完成了 Java 的增强,特别是随着 IBM 引入 IBM Java(它也有一些有趣的特性)。
一时之间,Sun Inc. 对微软提起诉讼java字符串加密,声称微软垄断了 IE 浏览器,并使用 JRE 来反对 Sun 的许可要求。 Sun 赢得了对 Microsoft 的诉讼,而 Oracle 最近推出了 Google Suite,在其移动 android 平台上使用 Java。
06 速览Java 15最新发布
Oracle Java Edition 基于 JDK Enterprise Proposals (JEPs) 和 Java Specification Requests (JSRs),而 EdDSA 是 JEP 339 的一个实现。它是一种使用大约 126 位加密算法的独立于平台的密码签名。 这可以用于具有更高安全性的数据传输处理以传输加密数据。 Java 15 中引入的封闭类是 JEP 360 的一种实现,它限制了哪些类可以扩展或实现封闭类。 例如:
public abstract sealed class Shape
permits Circle, Rectangle, Square {...}
使 Shape 成为一个封闭类,并且只允许“允许”类实现/扩展。 这允许安全访问类层次结构并控制接口的可重用性。 隐藏类基于 JEP 371 的实现,它通过允许在运行时使用反射 API 生成类来限制类的使用,并使类无法被外界发现。 因此,无法通过动态代理生成隐藏类,并且可以安全地访问它们。
ZGC 或 Z Garbage Collector 基于 JEP 377。在 Java 1.8 的早期版本中,G1 GC 是自我管理垃圾收集的突破,大大提高了性能。 后来在 Java 11 中,ZGC 引入了各种性能改进功能,现在在 Java 15 中,它得到了进一步的改进,如取消提交未使用的内存、多线程堆、并发类卸载等。
JEP 378 引入的 TextBlocks 功能支持创建以自动转义序列格式存储的多行字符串文字,并以可预测的方式格式化字符串,同时提高字符串文字的内存使用率。 这有效地将 XML、JSON 和 HTML 片段存储为 Java 代码中的字符串文字。
外部内存访问 API 是一个 JEP 383 实现,它允许程序有效地访问分配的 Java 堆之外的外部内存。 它首先作为预览版本在 Java 14 中引入,现在作为 Java 15 的一部分发布了改进版本。该 API 允许通过添加一行代码(如 MemorySegment.allocateNative(100))来快速分配本机内存段。