egrate native libraries
Mark Reinhold 在演讲中举了两个例子,首先是为 POSIX 操作系统 API 的头文件 unistd.h
中的函数生成 Java 的可访问代码。
jextract
工具会生成一堆的函数和类型,关键这些是从c的头文件中自动生成的,你不必费劲心思去自己设计类型和方法了。这一点比Go语言中的 CGO 要方便多了,快捷度可以和C#互操作性相媲美。
所以,以后你要是想从 Java 中访问 C 的链接库,可以使用 jextract
一步生成,
调用方法也很方便。
另一个例子是调用 C 标准库 time.h
中的 clock_gettime
函数,它的参数需要 struct 类型,使用上面相同的手段可以生成访问类:
当然这两个例子只演示了这个项目的一个功能,更多的功能我们可以持续关注。
Project Valhalla
包含两个Feature:值类型和基本类型的泛型。
- 值类型:提供不可变类型和非引用类型的支持。不可变类型在 Scala 中很常用,Java 中也会引进这中类型。使用这种类型有很多好处,一个就是可以显著地提高性能,因为数据不可变,你也不必担心同步更新的问题。
- 基本类型的泛型: 为 primitive type 提供泛型的支持,不必再进行装箱开箱操作。
Mark Reinhold 用一个复数矩阵相乘的例子来测试,测试工具使用 JMH。
首先是正常的 public class Complex {...}
类,然后改成值类型 public value class Complex{...}
再次测试,结果显示,
正常测试花费3.6秒内存分配3.7G;值类型则只需要0.3秒花费3.8M左右,效果惊人!
目前这些特性还在开发之中,Mark Reinhold 用 Java12 + 这些项目已经能跑一些例子了,我们可以期待不远的将来能在 Java 中使用到这些美妙的特性。