百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

Java 20年,以后将往哪儿走?(java未来前景)

wptr33 2025-03-20 20:06 7 浏览

在今年的Java 20周年的庆祝大会中,JavaOne 2015 的中心议题是“Java 的20年”。甲骨文公司Java平台软件开发部的副总裁Georges Saab的主题演讲就将关注点放在了java的发展历程、它主要的发展里程碑,并且深度关注于Java8及其更新。甲骨文公司Java平台首席架构师Mark Reinhold的主题演讲奠定了Java发展的路线图,并展示了定于2016年Q3季度发布的Java9 。

Reinhold提到Java成功的关键在于辨识到了痛点;找出了缺失的抽象类并添加了抽象类,以此方式来满足现有的解决方案。

Reinhold还说到“目标是随着时间的推移,要持续改善开发人员的开发效率,同时保留Java的可读性、简化性、通用性以及兼容性的核心价值。”

他推断,缺失的抽象类已经引领了Java5的泛型与Java8的lambdas表达式中的重大创新。2008年,Jigsaw项目引入了模块的概念,以此来解决两个不同的痛点:类路径地狱(Classpath Hell)和庞大的单体 JDK。

类路径地狱(Classpath Hell)

据Reinhold所称,类路径(Classpath)的根本问题在于它们不仅仅是类。他说“类路径是一种查找类的方式,不必关心组件、包甚至它们的预期用途。”

在类路径中,甚至都无法确定你们寻找的类就在jar文件内;我们也不知道是否有任何与应用开发接口相关的冲突。并且,当开发人员不知道或是不理解内部接口的目的,并对其进行改变时,内部接口就可能会暴露出一些安全问题。

  • 关注InfoQ[ID:infoqchina]了解更多技术领域干货内容。

据Reinhold所称,模块为jar文件提供了一个强有力的抽象类,模块是一个程序组件,它不仅能在java编程语言中实现,在java 虚拟机中同样也能。正如他所说的“模块是脱离类路径地狱(Classpath Hell)的关键。”

  • 模块可被看做是包的容器,与此同时,该模块也表述了它与其他模块是如何联系的;

  • 模块是包的容器;

  • 模块为其依赖的其他模块命名;

  • 一个模块不会对其他模块进行干扰;

  • 模块只有通过其它依赖它的模块才能输出特定的包来使用。

为了在Java9中使用模块,所需的jar文件中的模块必须在module-info.java文件中进行声明。文件名不是一个类的名字,它是一个约定,就像package-info.java一样;但它仍可以通过javac进行编译。模块化的jar文件包含module-info.class。该模块化的jar文件可作为一个单独的产物进行传送;对于java9预先发布的版本来说,模块化jar文件就像常规jar文件一样运行。

Reinhold提到,通过允许终端用户以从下到上或从上到下的方式将现有的系统进行模块化,模块的采用就大大地简化了。

单体JDK

Jigsaw项目提供了很多新的用例,传统意义上来讲这些用例不适合庞大的单体Java SE JDK。某些用例包括:

  • 小型设备——没有足够空间去存储所有的Java SE 包。

  • 云应用——不需要复制整个的Java SE JDK。因为在云中,密度是主要因素。(注:密度指的是能为一套特定的软硬件进行交付的系统与服务的数量。)

  • 维护与安全——庞大、整体化的JDK系统在子系统之间存在着千丝万缕的联系。并且,它缺乏内部接口的封装,这会导致安全问题。

据Reinhold所称,“模块为强有力的封装提供可依赖的配置。”

有了模块化,伴随着增强的安全性,开发人员只使用需要的功能。因此,在JDK 9中,所有非关键的内部接口将被封装。某些关键的内部接口例如sun.misc.Unsafe仍然可以访问。(绝大部分)内部接口封装的提出表明“JDK 9中引入的、替换掉原有版本的关键内部接口在JDK 9中将被弃用,或者被封装或者在JDK 10中被删除。”Reinhold 提到被封装后的内部接口仍可以在编译时和运行时通过命令行标志来进行访问。

在JavaOne 2015主题演讲上,甲骨文公司Java平台开发部的负责人Georges Saab、Mark Reinhold、Brian Goetz与其他人一起,谈论了Java20年来的发展历程。

在本文的第一部分,InfoQ介绍了Reinhold的主题演讲。现在,我们将介绍Brian Goetz,他是Java平台开发部的Java语言架构师,他窥见了Java10甚至更高版本的所有内在机理,尤其是谈论到Valhalla项目和Panama项目,而它们正是为Java 虚拟机和Java语言本身孕育重大进展的两个项目。这些进展旨在丰富Java虚拟机与底层硬件(包括操作系统)以及非Java应用编程接口之间的关联。

动机

随着时间的推移,越来越复杂的处理器核心设计已经影响了成本模型的时钟周期和底层硬件/中央处理器内核的分发槽问题。高速缓存缺失是非常昂贵的,尤其是当你还需要从主内存中读取数据的时候。因此急需Java和Java虚拟机具有更密集和平整的内存布局来提供更好的缓存和内存效率,从而跟上当今时代硬件的发展步伐。

Valhalla项目

Goetz提到Valhalla项目包括了一些Java语言和Java虚拟机的特色,这些特色用于与纯数据共同协作,而这些纯数据不包含对象强加的所有开销。他为我们举了以下的例子,并进行了相应的解释:

假设有一个简单的域对象 Point Class:

class Point { final int x; final int y; }

一个X-Y的实例数组会伴随着150%的内存开销,只为表示数据的两个词;一个两个词的对象头(通常用于所有的对象)及其元素,作为Point对象的引用,再加上每一个Point对象的头:

值类型

如果Point类不可改,我们就不要求它的身份;我们可以将Point类以数值类的形式定义为一个纯数据类型的Point。

value class Point { final int x; final int y; }

在这个例子里,这样的数值类型将不存在间接引用。因此,我们拥有一个友好的高速缓存布局,而这个布局不仅可以高效地使用内存,还具有更好的局域性。

据Goetz称:

数值类型就像类和基元之间的高速公路…从代码上来说,它们像类,但是从表现上来说,它们像整型变量。

特化泛型

有人提议通过增强Java语言和Java虚拟机来加强对超基元泛型的支持。关于数值类型的好消息就是它们可以向基元类型那样装箱了。结果,泛型被支持的程度最终也将超过所有数值类型。

据Goetz所称,即便你工作时用的是:

ArrayList

但实际上你想要的是:

ArrayList

因此现阶段核心Java库中无法实现你用前者工作却追求后者。但当你指定

ArrayList

其内存控制和内存开销的低效性与之前x-y Point类数组的例子十分相似。

如果指定:T为整型,对T进行装箱(Box for T=int),并对值类型进行扩展,开发者就会实现之前数值类型的那个例子中说的巨大的成本效益。

Panama项目

接下来,Goetz继续讨论Panama项目,该项目旨在为本地数据(例如:本地堆中的数据)和本机代码(例如:C中的函数)以更快、更加可信和更加安全的方式提供Java虚拟机的访问权限。

在Panama项目中,名为jextract的本地头文件输入工具会提取布局元数据(例如:C的头文件),并生成Java接口去调用本地方法或访问本地结构。在运行时期间,Java虚拟机会生成与用户可能编写的JNI代码相似的代码。

Goetz为我们举了个例子,该例子需要将指针传递给结构,以便从time.h中调用gettimeofday。因此,我们采用jextract来解析头文件,同时也会得到机器类型的信息。所得到的jar文件具有结构的定义和方法的声明。

因此,所有需要调用上述方法的类与结构都是时间库的参考,同时也是一种结构的创造,正如以下代码所示。

正如上述代码所示,之后想要获取属性就像调用getter方法一样简单了。

相关推荐

每天一个AI姬,AMD核显用户有福了,AI绘画打破 NVIDIA 显卡垄断

使用StableDiffusion进行AI绘画,并不一定只能使用NVIDIA英伟达显卡,甚至,也不一定只能使用独立显卡。今天我们使用AMD6800H核显,并安装了StableDif...

NETworkManager:功能强大的网络管理与问题排除工具

关于NETworkManagerNETworkManager是一款功能强大的网络管理与问题排除工具,该工具完全开源,可以帮助广大研究人员轻松管理目标网络系统并排除网络疑难问题。该工具使用远程桌面、Po...

AMD也能深度学习+免费AI绘画:StableDiffusion+ROCm部署教程!

某国政客扇扇嘴皮子,CN玩硬件和深度学习的圈子里就掀起了一场风暴,这就是著名的嘴皮子效应(误)。没了高性能计算的A100H100倒也能理解,但是美利坚这波把RTX4090禁售了就让人无语了,所以不少做...

windows 下编译 python_rtmpstream

最近在研究数字人,看了大咖的项目(https://github.com/lipku/metahuman-stream),尝试编译此项目的依赖项目python_rtmpstream(https://gi...

如何使用 Python 操作 Git 代码?GitPython 入门介绍

花下猫语:今天,我在查阅如何用Python操作Gitlab的时候,看到这篇文章,觉得还不错,特分享给大家。文中还提到了其它几种操作Git的方法,后续有机会的话,再陆续分享之~~作者:匿蟒...

网上看了不少,终于把ZlmediaKit流媒体框架搭建起来啦

你都站在2023年代了,视频通话、视频直播、视频会议、视频监控就是风口浪尖上的猪师兄,只要你学那么一丁点,拿个高薪的工作不过分吧!我也是半瓶子晃荡的,所以路人呀,共学习,同进步!本篇开始,只讲在Lin...

MacDown:一款 macOS 的强大 Markdown 编辑器

大家好,很高兴又见面了,我是"...

ZLMediaKit安装配置和推拉流

一、ZLMediaKit库简介ZLMediaKit是一个基于...

大神赞过的:学习 WebAssembly 汇编语言程序设计

文/阿里淘系F(x)Team-旭伦随着前端页面变得越来越复杂,javascript的性能问题一再被诟病。而Javascript设计时就不是为了性能优化设计的,这使得浏览器上可以运行的本地语言一...

【Docker】部署WVP视频监控平台

回来Docker系列,今天将会跟大家分享一则关于开源WVP视频监控平台的搭建。先说结论吧,一开始按照网上说的一步一步搭建没有搭建成功,不知道是版本太旧还是我这边机器有问题,尝试了好几个不同方式的搭建都...

MongoDB+GridFS存储文件方案

GridFS是MongoDB的一个内置功能,它提供一组文件操作的API以利用MongoDB存储文件,GridFS的基本原理是将文件保存在两个Collection中,一个保存文件索引,一个保存文...

【开源】强大、创新且直观的 EDA套件

今天分享的LibrePCB是...

Ollama如何制作自己的大模型?

背景Llama3发布了,这次用了...

Ollama使用指南【超全版】

一、Ollama快速入门Ollama是一个用于在本地运行大型语言模型的工具,下面将介绍如何在不同操作系统上安装和使用Ollama。官网:https://ollama.comGithub:http...

基于区块链的价值共享互联网即时通讯应用平台源码免费分享

——————关注转发之后私信回复【源码】即可免费获取到本项目所有源码基于区块链的价值共享互联网即时通讯应用平台,是一个去中心化的任何人都可以使用的通讯网络,是一款基于区块链的价值共享互联网即时通讯AP...