会议 | 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 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
12月前
|
算法 自动驾驶 机器人
MATLAB中实现LSD直线检测
MATLAB中实现LSD直线检测
Python采集淘宝店铺所有商品API接口指南
淘宝没有公开的官方API供采集店铺商品数据,但可以通过以下几种方法获取商品信息。需要注意的是,淘宝有严格的反爬机制,直接采集可能违反其服务条款。
|
XML JSON 前端开发
聊聊 API 管理-开源版 Yapi 到 SaaS 版 Apifox
API 管理这个话题近些年听到的频次越来越多,这本质上是个 web 领域的发展有关,也和开发协作方式有关--前后端分离代替了全栈工程师 hold all 的局面,强调的更多的是 API 复用、分工和协作细化。
 聊聊 API 管理-开源版 Yapi 到 SaaS 版 Apifox
太阳能光伏电池的simulink建模与仿真
本课题研究了太阳能光伏电池在不同光照温度和光照强度下的Simulink建模与仿真,分析了光伏电池的U-I特性和P-V特性曲线。通过MATLAB 2022a进行仿真,展示了不同温度下的特性曲线变化,揭示了温度对光伏电池性能的影响。核心原理包括光生电效应、PN结的形成与工作机理,以及载流子的产生、分离和收集过程。
|
人工智能 vr&ar Android开发
探索安卓与iOS的无限可能:移动操作系统的技术革新与未来展望
本文旨在探讨安卓和iOS这两大主流移动操作系统在技术上的创新与突破,以及它们如何塑造我们的数字生活。通过深入分析两者的最新进展、面临的挑战以及未来的发展趋势,文章揭示了移动操作系统在推动科技进步和满足用户需求方面的关键作用。我们将从技术角度出发,解读安卓的开放性与iOS的封闭性如何影响应用生态和用户体验,并探讨这些差异背后的设计理念和商业考量。同时,我们还将关注两大系统在安全性、隐私保护、人工智能集成等方面的最新动态,以及它们如何应对日益增长的网络安全威胁和用户对隐私保护的需求。此外,文章还将展望未来移动操作系统的发展,分析5G、物联网等新兴技术如何为安卓和iOS带来新的机遇和挑战,以及这两大
504 6
|
缓存 NoSQL Java
Springboot 多级缓存设计与实现
Springboot 多级缓存设计与实现
|
存储 网络协议 算法
OSI 七层模型和TCP/IP模型及对应协议(详解)
在OSI七层模型中,处于不同层的中继系统具有不同的名称。 一个设备工作在哪一层,关键看它工作时利用哪一层的数据头部信息。网桥工作时,是以MAC头部来决定转发端口的,因此显然它是数据链路层的设备。具体说:物理层:网卡,网线,集线器,中继器,调制解调器 数据链路层:网桥,交换机
1773 1
OSI 七层模型和TCP/IP模型及对应协议(详解)
|
缓存 编解码 数据处理
Web Worker:让网页飞起来的幕后英雄(上)
Web Worker:让网页飞起来的幕后英雄(上)
Web Worker:让网页飞起来的幕后英雄(上)
|
机器学习/深度学习 人工智能 自然语言处理
人工智能情感标注(Emotion Labeling)
人工智能情感标注(Emotion Labeling)
1247 2
|
算法 安全 Java
MD5 - 加密算法简要介绍与JAVA实现
MD5 - 加密算法简要介绍与JAVA实现
726 1