转载

浅谈JAVA的往日辉煌与未来趋势

24 岁,针对1个技术性人而言可谓正当壮年。但针对一门计算机语言而言,状况将会又有不一样。各种计算机语言横空出世,纷战难休,殊不知 TIOBE 的語言排名榜上,Java 却曝露了显著的颓势。這個著名的计算机语言,将来会是如何?

浅谈JAVA的往日辉煌与未来趋势

java的出身

小编整理了一些java进阶学习资料和面试题,需要资料的请加JAVA高阶学习Q群:664389243 这是小编创建的java高阶学习交流群,加群一起交流学习深造。群里也有小编整理的2019年最新最全的java高阶学习资料! ​​​​方便java程序员对将来能更好的规划和学习!从 1995 年第一位版本公布到如今,Java 語言早已在起起伏伏中走过了 24 年,最新的 Java 版本也早已迭代到 Java 10。当初 Java 語言的跨平台优点现如今来看也一切都是家常小菜,Go、Rust 等计算机语言横空出世,更加扩宽了计算机语言的界限。当初创造发明 Java 语言的 Sun 企业早就被 Oracle 收购,Oracle 如今也正处在水深火热的云计算技术浪潮之中,以至于连 Java 之父 James Gosling 也进入了当今社会世界最大的云计算企业 AWS。

Java 語言发展的这 24 年也正是全世界互联网技术飞速发展的 20 年,Java 语言同时也见证了电子商务浪潮、互联网技术浪潮、互联网大数据浪潮、云计算技术浪潮,所以在现今各大互联网企业身上都能见到 Java 的身影。

纵看 Java 語言的发展趋势,禁不住让人联想到辛弃疾的一首词:

千古江山,英雄无觅,孙仲谋处。舞榭歌台,风流总被雨打风吹去。斜阳草树,寻常巷陌,人道寄奴曾住。想当年,金戈铁马,气吞万里如虎。元嘉草草,封狼居胥,赢得仓皇北顾。四十三年,望中犹记,烽火扬州路。可堪回首,佛狸祠下,一片神雅社鼓。凭谁问,廉颇老矣,尚能饭否?

TIOBE 的语言排名榜显示,自 2016 年初 Java 语言就出现了显著的下颓趋势,开发者社区也出现了一些唱衰 Java 語言的论调,编者心中也有些许疑问:Java 老矣,尚能饭否?

浅谈JAVA的往日辉煌与未来趋势

java的往日辉煌

Java 語言始于 1991 年 Sun 企业 James Gosling 领导的的 Ork 项目,1995 年 Sun 企业宣布起名为 Java,并提出“Write once, Run anywhere"的口号。

1996 年 1 月 Java 1.0 发布,提供了1个解釋执行的 Java 虚拟机,其时正逢互联网技术刚开始盛行,Java 的 Applet 能在 Mozilla 电脑浏览器中运作,被看做是将来的互联网技术語言。

1997 年 2 月 Java 1.1 发布,Java 语言的基础特性基本明确了,例如反射 (reflection), JavaBean, 接口和类的关联这些,始终到今日都完全一致。然而,Java 最开始的一些总体目标,如在电脑浏览器中执行 Applet,以及跨平台的图形界面 Awt 很快遭受到负面影响的评论。

1998 年 12 月,Java 第一位里程碑式的版本,即 Java 1.2 发布了。这种版本应用了 JIT(Just in time)编译器技术,促使語言的可迁移性和实行速率达到最优化的平衡,同时 Collections 集合类设计良好,在企业应用开发中快速获得了广泛性应用。Sun 公司把 Java 技术机制分为3个大方向,各自是 J2SE(面向桌面和通用应用程序开发),J2EE(面向企业级应用开发),J2ME(面向移动终端开发)。这一归类影响十分悠久,突显出主流語言设计师的观念:对于于不一样的应用领域,在特征,API 集合等开展划分。

2000 年 5 月,Java 1.3 公布,这种版本中 Corba 作为语言等级的分布式系统对象技术性,成为 J2EE 的一个技术条件。J2EE 受到 Corba 的设计的影响较大,早期 EJB 的 Home,接口类型和保持就是说 Corba 在 C 語言的实现,被移植到 Java 語言当中。J2EE 中的 Servlet 标准规范得到了巨大的成功,随着着互联网的兴起,和浏览器真接通过 HTTP 安全协议人机交互的 Servlet,和诸多的 MVC 架构,变成 Web1.0 的网红。

2002 年 2 月,Java 1.4 发布,Java 語言真正迈向成熟期,保证了十分完善的語言特性,如 NIO,正则表达式,XML 处理器等。同年微软的.NET 框架公布,两者开始了为期十多年的暗自竟争。从語言特点上而言,.NET 后发先至,始终处在优势。但 Java 依赖优良的开发者生态,绝大部分大型软件公司的用户众多和不断奉献,以及对 Linux 电脑操作系统优良的支持,逐渐的在服务器端取得优越性主导地位。

2004 年 9 月,Java 5 发布,Sun 已不选用 J2SE, J2EE 这类取名方法,而使用 Java SE 5, Java EE 5 这样的命名。我觉得 Java 5 是第二个里程碑式的版本。Java 語言语法产生太大的转变,如注解 (Annotation),装箱 (Autoboxing),泛型 (Generic),枚举 (Enum),foreach 等被添加,提供了 java.util.concurrent 并发包。Java 5 对于 Java 语言的推进是极大的,特别是注释的加入,促使語言定义灵活了许多,程序员还可以写出更为适用领域概念的描述性程序。

2006 年 5 月, JavaEE 5 发布,至少最主要是 EJB3.0 的版本升级。在此之前,EJB2.X 版本被广泛质疑,SpringFramework 创建者 Rod Johnson 在经典书籍“J2EE Development without EJB“中,对 EJB2 意味着的分布式对象的设计方法予以批驳。EJB3 则再次历经更新改造,应用注解方法,历经应用服务器对 POJO 对象开展提高来改变分布式服务能力。在某种意义,都可以说 EJB3 拯救了 JavaEE 的太早衰落。

2006 年 12 月,Java 6 发布,这个語言语法改善不多,但在虚拟机内部结构做了很多的改善,称得上1个相当成熟平稳的版本,直到现在国內的许多公司仍然以 Java6 当做首要 Java 开发版本来应用。同年 Sun 公司作出1个值得尊敬的决策,将 Java 开源。OpenJDK 从 Sun JDK 1.7 版本分支出去,成为今日 OpenJDK 的基础。OpenJDK6 则由 OpenJDK7 剪裁而成,目前由红帽承当保护,来满足 Redhat Enterprise Linux 6.X 用户的需要。

2009 年 12 月,JavaEE 6 公布,这个版本应当就是 JavaEE 到迄今为止改善最多影响最悠远的1个版本。由于 JavaEE5 只有 EJB3 适应了 Java 注解语法的添加,而 EE6 全面接受了注释。CDI 和 BeanValidation 规范的进入,在 POJO 之中还可以界定完善的语义,由器皿来决策怎样去做。Servlet 也升级到 3.0 版本,并在接口上添加异步支持,促使系统软件总体速率可以大幅度提高。EE 划分为 Full Profile 和 Web Profile,用户还可以依据自身的需用挑选不一样的功能集。

在此之前,Oracle 已经以 74 亿美金的价格收购了 Sun 公司,获得了 Java 商标logo和 Java 主动权。也收购了 BEA 公司,得到市场占有率最多的应用服务器 Webogic。JavaEE 6 虽然是收购之后发布的版本,但关键的设计方案工作依然由原 Sun 企业的 Java 权威专家进行。

2011 年 7 月,Oracle 发布 Java 7, 列举关键的特点是 NIO2 和 Fork/Join 并发包,虽然语言上沒有大的提高,但我本人觉得,自从 Oracle JDK(包括 OpenJDK7),Java 虚拟机的稳定真正作到的工业级,变成1个计算平台而服务于全球。

2013 年 6 月,Oracle 公布 JavaEE 7,这一版本进入了 websocket,Batch 的支持,而且加入 Concurrency 来对服务器多线程进行监管。然而全部的子标准,算上选择项 (Optional) 总共有 40 多项,开发人员光是阅读理解标准文本就很费劲了,更不必说可以全局速成熟练掌握。JavaEE 规范的本质是企业级应用设计的经验结晶,每1个 API 都历经诸多丰富工作经验的权威专家反反复复商讨并明确。各个版本相互之间都可以保证向后兼容,换句话说,即便是 10 年前写的 Servlet 程序,当今的开发者还可以流畅的阅读源代码,历经一部分代码更改和配置改动,还可以部署在当今的应用服务器上。相反,今后用 Servlet4 写的程序,浏览器和服务器通信应用全新升级的 HTTP/2 协议,但程序员在理解上不会有障碍,就是说因为 Servlet 规范的 API 十分平稳,基本找不到大的变动修改。

2014 年 3 月,Oracle 发布 Java 8,这个版本是我认为的第三个有里程碑式作用的 Java 版本。其中最引人注意的便是 Lambda 表达式了,此后 Java 語言原生提供了函数式编程能力。语言层面大的特性提升还有:Streams,Date/Time API, 新的 Javascript 引擎 Nashorn,集合的并行计算支持等,Java8 更加适应海量云计算的需要。

依照原先的计划方案,Java9 应该在2017年 7 月发布,但由于模块化 (JPMS) 投票未通过的原因,推迟到2017年 9 月份发布。其中最主要更新是 Servlet 4.0 和 CDI 2.0。

浅谈JAVA的往日辉煌与未来趋势

Java的优点

Java是最好的語言么?并不是,是因为在各个方面还有更适合的计算机语言。C語言毫无疑问是当代计算机软件编程语言的王者,基本上各种的操作系统全部都是 C语言写出的C++ 是面向对象的 C 语言,始终在持续的改善。

JavaScript 是能运行在电脑浏览器中的语言,丰富多彩的前端开发页面依靠 Javascript 的功劳。近些年的 Node.js 又在后端占有一席之地。Python 用于系统管理,并根据高性能预编译的库,提供 API 来进行科学计算,文本处理等,是 Linux 必选的解释性语言。

Ruby 强于 DSL(各个领域指定語言),程序员还可以界定丰富的语义来充足表述自身的思想。Erlang 就是为分布式计算设计的,能保证在规模性并发访问的状况下,维持强壮和稳定性。Go 语言内置了并发能力,可以编译成本地代码。当前新的网络相关项目,很大比例是由 Go 语言编写的,如 Docker、Kubernetes 等。

编写网页用 PHP,函数式编程有 Lisp,编写 iOS 程序有 Swift/ObjectiveC。一段话归纳,能留到排行榜之中的語言,全部都是好的语言,在其所属的领域能做到最好。

那麼,Java 语言究竟有何优势可以占有排名榜第二的位子呢?

其一,语法非常简单,学过计算机编程的开发者都能快速上手。

其二,在若干了领域都有较强的竞争能力,例如服务端编程,高性能互联网程序,企业软件事务处理,分布式计算,Android 移动终端应用开发这些。

最重要的一点是符合工程学的需求,我们了解当代软件全是协作开发,那麼代码可维护性,编译时检查,较为高效率的运行效率,跨平台能力,丰富的 IDE,测试,项目管理工具配合。都使得 Java 成为企业软件公司的首选,也得到很多互联网公司的青睐。

没有薄弱点,容易从市场上找到 Java 软件工程师,软件公司选择 Java 做为首要编程语言,再在特定的领域应用其他语言协作编程,这样的组合选择,肯定是不会有大的疑问。

因此综合性来讲,Java 语言全能层面是最好的。 小编整理了一些java进阶学习资料和面试题,需要资料的请加JAVA高阶学习Q群:664389243 这是小编创建的java高阶学习交流群,加群一起交流学习深造。群里也有小编整理的2019年最新最全的java高阶学习资料! ​​​​方便java程序员对将来能更好的规划和学习!

Java的未来展望

现如今的 Java,早已在功能性上相当丰富多彩了,Java 8 加入 Lambda 特性,Java 9 加入模块化特性之后,关键的語言特点好像早已都列入进去。要是说些最该考量的一些作用,我认为有以下几点:

模块化改造结束以后,将会会冒出大量专业的 JDK 发行软件商,提供在功能方面,例如针对于分布式计算,机器学习,图形计算等,纳入相关的功能库作为文件。这样专业行业用户还可以挑选历经充足提升后的 JDK 版本。

Java 语义上对“模式匹配”有更强的支持,如今的 switch 语句能力還是较为缺乏,可以向 Erlang, Scala 等语言效仿。

多线程并发处理,Java 做的已经很好了。不过我本人感觉还可以在多进程多线程配合,以及语言档次数据管路表达上,可以开展改建和提升。

JDK9 会有 HTTP/2 client 端的能力,但毫无疑问会有更多更好的三方库出现,JDK 可以和这些三方库通力合作,提供一个更好 API 界面和 SPI 参考实现。

目前 Java 在云计算方面遇到的最大问题还是占用内存过大。我个人认为从两个方面来看:

如果该应用的确是长时间运行的服务,可以考虑结构清晰的单体结构,算下来总的内存消耗并不会比多个微服务进程占用的更多。

微服务应用,未来可以采用编译成本地代码的方式,并使用优化过的三方库,甚至本地 so 文件,减少单个进程的过多内存占用。

安全框架更加清晰,SPI 可以允许三方库提供更强大更高效的安全功能。

JavaEE 方向则有更多的改进的地方:

EJB 重构目前的 Corba 分布通信基础,参考 gRPC 进行远程系统调用。

分解 EJB 规范,把 JVM 进程相关的特性,如注入 / 加强 / 事务 / 安全都统一到 CDI 规范中;对 EJB 进行裁剪,保留远程访问特性和作为独立执行主体分布式对象能力。

加强 JMS 和 MDB,媲美 Akka 目前的能力。

JaxRS 适度优化,不必要依赖 Servlet,或者适度调整,来提供更大的能力。

JPA 借鉴 JDO,以及融入一部分特性,做到对 NoSQL 更良好的支持。

浅谈JAVA的往日辉煌与未来趋势

总结规划:

小编整理了一些java进阶学习资料和面试题,需要资料的请加JAVA高阶学习Q群:664389243 这是小编创建的java高阶学习交流群,加群一起交流学习深造。群里也有小编整理的2019年最新最全的java高阶学习资料! ​​​​方便java程序员对将来能更好的规划和学习!

原文  https://studygolang.com/articles/17524
正文到此结束
Loading...