会议 | JavaOne 2017参会报告

简介: 见证世界最前沿的应用开发技术!

_1

序言

2017年国庆节,蚂蚁金服的几位小伙伴们前去参加了Oracle在旧金山举行的JavaOne 2017会议。来自全球多家公司的技术专家和听众们齐聚一堂,分享、见证了世界最前沿的应用开发技术。

本次会议除了必备的Java语言平台最新特性介绍之外,还有几个有特色的话题,包括:云计算、FAAS、微服务、大数据、人工智能、区块链等热点或前沿技术。本文试着从中挑出java语言平台、FAAS给大家做一个介绍。

Java语言平台

1. JDK9的新特性
今年9月Oracle发布了JDK9版本,有许多新特性,本次大会也花了大量篇幅做了重点介绍。其中, Azul Systems公司的CTO对其做了一个精彩的总结,末尾展示了该公司自行研发的商业版JDK ---- Zulu Java的一些增强特性,值得大家借鉴。

  • JDK9最大的变化是模块化

正如其项目代号“拼图”(Jigsaw)所暗示的,新版的JDK对标准类库、API、源代码都进行了重组和模块化,封装了绝大多数内部API,sun.misc.Unsafe类也有了替代的使用方式(Variable Handles)。

模块化导致JDK/JRE的目录结构也发生了变化,JDK9删掉了jre/、tools.jar、rt.jar,其功能被conf/、jmods/取代。

  • 集合工厂方法

例如,List、Set、Map接口可以通过静态工厂方法of()直接填充出一个对象,省去了繁琐的代码。

Setset = Set.of("a", "b", "c");

等价于老代码:

Setset = new HashSet<>();
set.add("a");
set.add("b");
set.add("c");
set = Collections.unmodifiableSet(set);
  • 改进的Stream API

体现在很多细节方面,举几个例子:

  • 从Scala等语言中借鉴了不少特性。如takeWhile()/dropWhile()函数,我们平时用的skip()使用数字、而dropWhile()使用自定义谓词来跳过若干个元素。例如:
Stream.of(2, 4, 6, 8, 9, 10, 12)
    .dropWhile(n -> n % 2 == 0)
    .forEach(System.out::println);

将输出:
9
10
12

  • 增强了迭代器,用起来更像for循环。例如:
IntStream.iterate(1, i -> i < 100, i -> i + 1).forEach(System.out::println);

会输出从1到99。

  • 用内存映射(mmap)实现了高性能的Files.lines()方法,解决了JDK8中BufferedReader.lines()的性能问题。

详情参见:https://bugs.openjdk.java.net/browse/JDK-8072773(请将网址复制至浏览器中打开)

  • 终于有了交互式java控制台 ----Jshell。

_2

  • JVM增强

G1成为JDK9的默认垃圾回收器。众所周知G1的停顿时间短,但某些情况下G1仍然会触发Full GC导致长时间停顿。Azul Systems公司研发的付费版Zing JVM就可以解决这个问题,它使用C4(Continuously Concurrent Compacting Collector)垃圾回收算法,有很高的回收效率。

01

从上表可以看出,C4算法消除了“stop-the-world”这种负面影响。其本质是通过在JVM中创建一个虚拟地址映射表,GC线程和工作线程共享该映射表、相互协作、lazy的方式规避了长时间的线程间互相等待。当GC线程先占据某对象内存并将其移到压缩区后,工作线程访问该对象时需要根据映射表重新定位;当工作线程先占据该对象后,发现GC线程已经将其标记为要移动,则协助GC线程完成部分移动工作,确保虚拟地址正确,然后紧接着处理自己的业务指令,GC线程会接管完成后续的扫尾工作。

JDK9还有许多其他方面的小改进,如jar包中可以发布多个版本、字符串性能提升等,就不再赘述了。

2. Java EE相关
Oracle的VP做了关于Java EE8的更新报告。更新点包括:

  • JSON Binding API
  • JAS-RS reactive client API,及对服务端推送事件的支持
  • Servlet对HTTP/2的支持
  • JAVA EE新的安全相关API
  • Bean Validation 和 CDI的新特性

_3

多位其他Speaker分别对这些点进行了阐述和演示。关于Java EE的应用,有一个跟蚂蚁的业务相关度较高----使用EE搭建一个内容推荐引擎,重点介绍一下。

实现推荐的过程是准备数据、建立关联、再通过图形搜索相关联的节点得到推荐结果,本案例实际上是使用EE4J,通过JNoSQL+图计算框架+图形数据库创建。

_4

JNoSQL包括通信API:Diana,以及在其上面使用了CDI的映射API:Artemis。重点是Graph引擎,使用了Apache开源项目TinkerPop. TinkerPop是一个图形计算框架,重在计算,下层需要有存储系统,它可以支持图形数据库,也能支持图形分析系统,如ArangoDB,Keyline,MongoDB,Hadoop,Titan,Neo4j等。有了这样的架构,开发者就可以很轻松的通过DAO来操纵图形数据,从而方便的写出推荐业务逻辑。本案例还给出了使用TinkerPop与传统SQL之间复杂度的对比,说明为什么要使用图形引擎。

在Keynotes专场会议里,阿里的AJDK大放异彩,研究员英通讲解了AJDK在双11的应用场景,庞大的业务数据震撼了全场。

_5

Serverless FAAS和云计算

Serverless FAAS是本次大会的一个亮点, Luminis公司的Bert Ertman做了演讲,介绍了FAAS的发展历史,技术实现,业内实例,技术支撑体系,以及serverless的优点。结论就是:

_6

FAAS其本质是一种比云计算更彻底的托管,用户只需关注编写自己的业务逻辑函数,其余的全由托管服务完成。预测无服务器架构有可能成为未来架构的一个趋势。

Bert Ertman列举了Serverless的几个优点:

  • 很容易被云计算用户接受(“托管”的概念很是类似)
  • 把java函数提升为一等公民(应该是从语言发展&应用角度说的)
  • 基于事件、无状态(意味着写业务代码简洁方便)
  • 理论上可无限扩展(无状态,当然容易水平扩容)
  • 与传统部署模型不同(部署起来简单)
  • 其他经济方面的利益

但小编认为,凡事都有两面性,Serverless FAAS这种模式严重受限于托管服务提供商,各提供商的接口规范可不一定能很快标准化,可以想象一下受限于某一个服务提供商的害处……

_7

此外,关于云计算方面,介绍了Java开发者使用Docker, Kubernetes, OpenShift来构建应用,演示了各种实例demo,在这里就不一一说明了。

_8

会议总结

这次JavaOne会议的涉及的技术内容相当广泛,报告者均来自全球非常有实力的公司,技术思路新颖清晰,对与会者有很大的启示。最后,附上本文相关的演讲资料,大部分讲义可以在这里下载到:
https://events.rainfocus.com/catalog/oracle/oow17/catalogjavaone17(请将网址复制至浏览器中打开即可查看)

放一张外景图作为结束。

_9

相关实践学习
【玩转ComfyUI】基于函数计算一键部署AI生图平台ComfyUI
本次实验将带大家通过使用阿里云产品函数计算FC,快速使用ComfyUI实现更高质量的图像生成。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
9月前
|
算法 自动驾驶 机器人
MATLAB中实现LSD直线检测
MATLAB中实现LSD直线检测
|
人工智能 算法 架构师
人工智能认证就业:从能力认证到职业跃迁的路径解析
人工智能浪潮席卷全球,AI技术正深刻重构职业生态。生成式人工智能认证(GAI认证)应运而生,作为系统化能力认证体系,它不仅帮助个人锚定技术方向,也为企业提供可靠的人才评估标尺。本文从宏观与个体视角探讨AI认证的价值:宏观上,认证体系是人才市场的“通用语言”,助力伦理合规;个体层面,认证能打破经验壁垒、实现职业跃迁,并通过体系化学习提升安全感。GAI认证以“技术深度+场景广度+伦理高度”设计,成为连接技术变革与职业发展的桥梁,鼓励每个人成为AI时代的“能力架构师”。
|
10月前
|
API Python
Python采集淘宝店铺所有商品API接口指南
淘宝没有公开的官方API供采集店铺商品数据,但可以通过以下几种方法获取商品信息。需要注意的是,淘宝有严格的反爬机制,直接采集可能违反其服务条款。
|
10月前
|
人工智能 数据安全/隐私保护 容器
基础知识与排版技巧全面指南
本教程详细介绍了HTML基础标签的使用,包括排版标签、块级与行内元素、文本标签、图片与超链接、列表、表格、表单控件等内容,适合初学者系统学习HTML结构与语义化标签的应用。
245 0
|
网络协议 Java
在SpringBoot项目中使用Netty实现远程调用
本文介绍了使用Netty解决网络连接性能问题的方法,重点讲解了Netty的NIO特性及其在SpringBoot中的应用。Netty作为高效的NIO框架,支持非阻塞IO,能通过单线程管理多个客户端连接,简化TCP/UDP套接字服务器开发。文章详细展示了Netty在SpringBoot中实现远程调用的过程,包括服务端与客户端代码实现、依赖配置及测试验证。通过示例代码,如`NettyServer`、`NettyClientUtil`等,清晰说明了Netty的工作原理和实际应用,解决了半包等问题,并提供了完整的测试结果。
1013 3
|
存储 安全 数据安全/隐私保护
FileCodeBox:Star4.9k,类似百度网盘,小团队、小公司都用得上的文件共享与分享工具,支持设置分享密码,界面清爽简单易用
FileCodeBox是一款开源文件共享工具,类似百度网盘,适合小团队和公司使用。它支持设置分享密码,界面简洁易用,提供匿名文件和文本分享功能。用户可通过提取码轻松获取文件,支持多种上传方式、文件类型及设备访问。项目基于FastAPI + SQLite3 + Vue3构建,具备轻量、安全、多语言支持等特点
1082 2
|
人工智能 自然语言处理 数据可视化
什么是AIGC?如何使用AIGC技术辅助办公?
2分钟了解AIGC技术及其如何提高日常办公效率!
4587 4
什么是AIGC?如何使用AIGC技术辅助办公?
|
Oracle Java 关系型数据库
安装 JDK 时应该注意哪些问题
选择合适的JDK版本需考虑项目需求与兼容性,推荐使用LTS版本如JDK 17或21。安装时注意操作系统适配,配置环境变量PATH和JAVA_HOME,确保合法使用许可证,并进行安装后测试以验证JDK功能正常。
1006 3
|
测试技术 开发工具 iOS开发
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
这篇文章是iOS自动化测试方案的第三部分,介绍了在没有MacOS系统条件下,如何使用WDA(WebDriverAgent)结合Python客户端库facebook-wda和tidevice工具,在Windows系统上实现iOS应用的自动化测试,包括环境准备、问题解决和扩展应用的详细步骤。
4294 1
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
|
XML JSON 前端开发
聊聊 API 管理-开源版 Yapi 到 SaaS 版 Apifox
API 管理这个话题近些年听到的频次越来越多,这本质上是个 web 领域的发展有关,也和开发协作方式有关--前后端分离代替了全栈工程师 hold all 的局面,强调的更多的是 API 复用、分工和协作细化。
 聊聊 API 管理-开源版 Yapi 到 SaaS 版 Apifox

热门文章

最新文章