会议 | 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

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
9月前
|
人工智能 算法 架构师
人工智能认证就业:从能力认证到职业跃迁的路径解析
人工智能浪潮席卷全球,AI技术正深刻重构职业生态。生成式人工智能认证(GAI认证)应运而生,作为系统化能力认证体系,它不仅帮助个人锚定技术方向,也为企业提供可靠的人才评估标尺。本文从宏观与个体视角探讨AI认证的价值:宏观上,认证体系是人才市场的“通用语言”,助力伦理合规;个体层面,认证能打破经验壁垒、实现职业跃迁,并通过体系化学习提升安全感。GAI认证以“技术深度+场景广度+伦理高度”设计,成为连接技术变革与职业发展的桥梁,鼓励每个人成为AI时代的“能力架构师”。
|
8月前
|
网络协议 Java
在SpringBoot项目中使用Netty实现远程调用
本文介绍了使用Netty解决网络连接性能问题的方法,重点讲解了Netty的NIO特性及其在SpringBoot中的应用。Netty作为高效的NIO框架,支持非阻塞IO,能通过单线程管理多个客户端连接,简化TCP/UDP套接字服务器开发。文章详细展示了Netty在SpringBoot中实现远程调用的过程,包括服务端与客户端代码实现、依赖配置及测试验证。通过示例代码,如`NettyServer`、`NettyClientUtil`等,清晰说明了Netty的工作原理和实际应用,解决了半包等问题,并提供了完整的测试结果。
855 3
|
机器学习/深度学习 人工智能 自然语言处理
《打破知识壁垒:解锁自然语言处理模型跨领域知识图谱关联与推理密码》
在人工智能快速发展的背景下,自然语言处理(NLP)技术成为各行业智能化变革的关键。知识图谱作为结构化的语义知识库,通过“实体-关系-实体”三元组描绘现实世界的概念及其关系,为NLP模型提供背景知识和推理依据。然而,随着多领域知识的爆发式增长,如何实现不同领域知识图谱的有效关联与推理成为亟待解决的问题。本文探讨了理解领域特性、实体对齐、关系映射与融合及深度学习推理模型构建等关键步骤,旨在打破领域间知识壁垒,提升NLP技术的智能化水平,推动其在智能问答、推荐、决策辅助等领域的广泛应用。
506 1
|
存储 安全 数据安全/隐私保护
FileCodeBox:Star4.9k,类似百度网盘,小团队、小公司都用得上的文件共享与分享工具,支持设置分享密码,界面清爽简单易用
FileCodeBox是一款开源文件共享工具,类似百度网盘,适合小团队和公司使用。它支持设置分享密码,界面简洁易用,提供匿名文件和文本分享功能。用户可通过提取码轻松获取文件,支持多种上传方式、文件类型及设备访问。项目基于FastAPI + SQLite3 + Vue3构建,具备轻量、安全、多语言支持等特点
731 2
|
关系型数据库 MySQL Linux
一次虚拟机centos7系统崩溃恢复记录
一次虚拟机centos7系统崩溃恢复记录
979 0
|
人工智能 自然语言处理 数据可视化
什么是AIGC?如何使用AIGC技术辅助办公?
2分钟了解AIGC技术及其如何提高日常办公效率!
4110 4
什么是AIGC?如何使用AIGC技术辅助办公?
|
机器学习/深度学习 人工智能 搜索推荐
DeepSeek-V2.5-1210 在线开放使用!支持联网搜索,在各大领域的表现得到全面提升
DeepSeek-V2.5-1210 是 DeepSeek V2.5 系列的最终版微调模型,支持联网搜索功能,具备在数学、编程、写作和角色扮演等领域的能力提升。本文将详细介绍该模型的功能、技术原理及应用场景。
10482 19
DeepSeek-V2.5-1210 在线开放使用!支持联网搜索,在各大领域的表现得到全面提升
|
Oracle Java 关系型数据库
安装 JDK 时应该注意哪些问题
选择合适的JDK版本需考虑项目需求与兼容性,推荐使用LTS版本如JDK 17或21。安装时注意操作系统适配,配置环境变量PATH和JAVA_HOME,确保合法使用许可证,并进行安装后测试以验证JDK功能正常。
882 3
|
C# Android开发 iOS开发
9 个 .NET UI 框架,您的选择是?
介绍 9 款 .NET UI 框架,有你的菜麽。
2850 1
9 个 .NET UI 框架,您的选择是?
|
开发框架 JavaScript 前端开发
uni-app x 跨平台开发框架
uni-app x 是一个强大的跨平台开发框架 uni-app x 是一个庞大的工程,它包括uts语言、uvue渲染引擎、uni的组件和API、以及扩展机制。
426 1