硬核干货——《中小企业 AI 实战指南》免费下载! 了解详情
写点什么

JavaOne 2015 主题演讲 Part2

  • 2015-11-26
  • 本文字数:1737 字

    阅读完需:约 6 分钟

在 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<Integer>但实际上你想要的是:

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

ArrayList<Integer>其内存控制和内存开销的低效性与之前 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 方法一样简单了。

延伸资源

有关 Valhalla 项目和 Panama 项目的更多信息,请参阅:

State of the Specialization

State of the Values

http://mail.openjdk.java.net/pipermail/announce/2014-June/000172.html

https://blogs.oracle.com/jrose/entry/the_isthmus_in_the_vm

查看英文原文: JavaOne 2015 Keynote Part2


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群(已满),InfoQ 读者交流群(#2))。

2015-11-26 18:001857

评论

发布
暂无评论
发现更多内容

迈向深度智能:CoT数据集如何让大模型学会「一步一步思考」?

数据堂

AI 数据集 大模型 思维链 CoT数据集

YashanDB知识库|账号被锁了怎么办?一文教你快速定位和解锁!

数据库砖家

数据库·

接单流程设计探索

京东科技开发者

VMware Cloud Director Availability 4.7.2 - 灾难恢复和迁移 (DRaaS 解决方案)

sysin

vmware

金仓KingbaseES两地三中心方案简介

金仓技术

KingBase 金仓数据库

YashanDB知识库|imp 跨服务器导入太慢?其实是网络延迟+SQL交互在“搞事”

数据库砖家

数据库·

YashanDB知识库|非 OM 安装数据库无法纳管到 YCM?原来是少了这一步!

数据库砖家

数据库·

高并发下单库存扣减异常?飞算 JavaAI 自动化生成分布式事务解决方案

飞算JavaAI开发助手

IoTDB MCP 获官方收录!从冷门协议到行业焦点:MCP 如何改变 AI 与数据的交互方式?

Apache IoTDB

低代码:数字化转型的 “金钥匙” 还是 “幻影”?

代码制造者

基于华为开发者空间从0实现一个MCP Server

华为云开发者联盟

华为云 华为开发者空间

G1原理—G1垃圾回收过程之Mixed GC

不在线第一只蜗牛

Java 算法 JVM

YashanDB 知识库|自动选举参数配错引发的“连锁反应”,你中招了吗?

数据库砖家

数据库·

绝味20岁生日会,鸭厂鹅厂联手发布中国零售连锁AI垂直场景大模型

脑极体

AI

飞算JavaAI深度评测:从代码生成到工程化落地的完整能力

飞算JavaAI开发助手

金仓数据库KingbaseES客户端编程接口侧负载均衡技术解析

金仓技术

KingBase 金仓数据库

C.AI 推出 AvatarFX 模型:让图片角色开口说话;Grok 升级视觉理解,支持多语种语音和语音实时搜索丨日报

声网

YashanDB 知识库|YCM 纳管主机失败?一看就是端口或防火墙的问题!

数据库砖家

数据库·

YashanDB|担心异构数据库迁移踩“坑”?听听实战大咖怎么说

数据库砖家

数据库·

2025 Java 框架痛点全解析:如何避免性能瓶颈与依赖混乱

飞算JavaAI开发助手

Java 开发瓶颈破局:飞算 JavaAI 如何一站式生成标准化项目结构?

飞算JavaAI开发助手

探索Playwright:前端自动化测试的新纪元

京东科技开发者

VMware Cloud Director Availability 4.7.3 - 灾难恢复和迁移 (DRaaS 解决方案)

sysin

vmware

邀请函丨解锁颗粒仿真新视界:2025 Altair EDEM离散元技术研讨会报名启动!

Altair RapidMiner

制造业 数字孪生 CAE 离散元 EDEM

AI时代下,应用动态化开发有新的思路?

Speedoooo

灰度发布 热更新 小程序容器 小程序技术 动态化技术

掌握设计模式--代理模式

量贩潮汐·WholesaleTide

设计模式

从编码执行者到系统指挥官:AI时代程序员的价值跃迁之路

飞算JavaAI开发助手

金仓数据库KingbaseES系统故障的排查方法

金仓技术

KingBase 金仓数据库

加速鸿蒙生态建设,APP混合开发或许是企业抢占增量流量的机会

Speedoooo

ai框架 小程序容器 小程序技术 纯血鸿蒙 鸿蒙生态

澳鹏(中国)9大垂类数据服务能力全景解读

澳鹏Appen

数据标注 大模型 垂类大模型

越读,越AI读:华为阅读用科技重新定义“阅读自由”

最新动态

JavaOne 2015主题演讲Part2_Java_Monica Beckwith_InfoQ精选文章