写点什么

JavaOne 2015 主题演讲 Part1

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

    阅读完需:约 6 分钟

在今年的 Java 20 周年的庆祝大会中,JavaOne 2015 的中心议题是“Java 的 20 年”。甲骨文公司 Java 平台软件开发部的副总裁 Georges Saab 的主题演讲就将关注点放在了 java 的发展历程、它主要的发展里程碑,并且深度关注于 Java8 及其更新。甲骨文公司 Java 平台首席架构师 Mark Reinhold 的主题演讲奠定了 Java 发展的路线图,并展示了定于 2016 年 Q3 季度发布的 Java9 。

Reinhold 提到 Java 成功的关键在于辨识到了痛点;找出了缺失的抽象类并添加了抽象类,以此方式来满足现有的解决方案。

Reinhold 还说到“目标是随着时间的推移,要持续改善开发人员的开发效率,同时保留 Java 的可读性、简化性、通用性以及兼容性的核心价值。”

他推断,缺失的抽象类已经引领了 Java5 的泛型与 Java8 的 lambdas 表达式中的重大创新。2008 年,Jigsaw 项目引入了 _ 模块 _ 的概念,以此来解决两个不同的痛点:类路径地狱 (Classpath Hell) 和庞大的单体 JDK。

类路径地狱 (Classpath Hell)

据 Reinhold 所称,类路径 (Classpath) 的根本问题在于它们不仅仅是类。他说“类路径是一种查找类的方式,不必关心组件、包甚至它们的预期用途。”

在类路径中,甚至都无法确定你们寻找的类就在 jar 文件内;我们也不知道是否有任何与应用开发接口相关的冲突。并且,当开发人员不知道或是不理解内部接口的目的,并对其进行改变时,内部接口就可能会暴露出一些安全问题。

重要通知:接下来 InfoQ 将会选择性地将部分优秀内容首发在微信公众号中,欢迎关注 InfoQ 微信公众号第一时间阅读精品内容。

据 Reinhold 所称,模块为 jar 文件提供了一个强有力的抽象类,模块是一个程序组件,它不仅能在 java 编程语言中实现,在 java 虚拟机中同样也能。正如他所说的“模块是脱离类路径地狱 (Classpath Hell) 的关键。”

  • 模块可被看做是包的容器,与此同时,该模块也表述了它与其他模块是如何联系的;
  • 模块是包的容器;
  • 模块为其依赖的其他模块命名;
  • 一个模块不会对其他模块进行干扰;
  • 模块只有通过其它依赖它的模块才能输出特定的包来使用。

为了在 Java9 中使用模块,所需的 jar 文件中的模块必须在 module-info.java 文件中进行声明。文件名不是一个类的名字,它是一个约定,就像 package-info.java 一样;但它仍可以通过 javac 进行编译。模块化的 jar 文件包含 module-info.class。该模块化的 jar 文件可作为一个单独的产物进行传送;对于 java9 预先发布的版本来说,模块化 jar 文件就像常规 jar 文件一样运行。

Reinhold 提到,通过允许终端用户以从下到上或从上到下的方式将现有的系统进行模块化,模块的采用就大大地简化了。

单体 JDK

Jigsaw 项目提供了很多新的用例,传统意义上来讲这些用例不适合庞大的单体 Java SE JDK。某些用例包括:

  • 小型设备——没有足够空间去存储所有的 Java SE 包。
  • 云应用——不需要复制整个的 Java SE JDK。因为在云中,密度是主要因素。(注:密度指的是能为一套特定的软硬件进行交付的系统与服务的数量。)
  • 维护与安全——庞大、整体化的 JDK 系统在子系统之间存在着千丝万缕的联系。并且,它缺乏内部接口的封装,这会导致安全问题。

据 Reinhold 所称,“模块为强有力的封装提供可依赖的配置。”

有了模块化,伴随着增强的安全性,开发人员只使用需要的功能。因此,在 JDK 9 中,所有非关键的内部接口将被封装。某些关键的内部接口例如 sun.misc.Unsafe 仍然可以访问。(绝大部分)内部接口封装的提出表明“JDK 9 中引入的、替换掉原有版本的关键内部接口在 JDK 9 中将被弃用,或者被封装或者在 JDK 10 中被删除。”

Reinhold 提到被封装后的内部接口仍可以在编译时和运行时通过命令行标志来进行访问。

延伸资源:

有关 Jigsaw 项目的更多信息,请查阅:

JEP 200: 模块化 JDK

JEP 201: 模块化源代码

JEP 220: 模块化运行时图形

JEP 260: 封装大多数内部接口

JEP 261: 模块化系统

快速启动Jigsaw 项目

查看英文原文: JavaOne 2015 Keynotes (Part 1)


感谢张龙对本文的审校。

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

2015-11-26 18:002141

评论

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

Go语言开发小技巧&易错点100例(四)

闫同学

三周年连更

用情景领导力帮助团队管理-1

搬砖的周狮傅

我给大家免费公开五份阿里Java架构师学习手册!助力金三银四

Java你猿哥

Java 架构 算法 高并发 Java性能调优

ES6中的Proxy

格斗家不爱在外太空沉思

JavaScript ES6 三周年连更

深度分析:SpringBoot中自定义starter实例与原理

Java你猿哥

spring Spring Boot SSM框架 Spring boot starter test

SpringBoot中如何解决Redis的缓存穿透、缓存击穿、缓存雪崩?

Java Stream常见用法汇总,开发效率大幅提升

程序员大彬

Java java8

缓存失效后的解决方案

穿过生命散发芬芳

缓存 三周年连更

盘点一下市面上常见的八种光纤接头,网络工程师你知道几个?

wljslmz

三周年连更

鲲鹏DevKit原生开发,效率倍增使能极简开发

乌龟哥哥

鲲鹏 DevKit 三周年连更

一个强大的go生产力工具,极大的提高开发效率、缩短开发项目时间和人工成本

vison

微服务 gRPC Go 语言 gin 代码自动生成

【坚果派 - 坚果】OpenHarmony编译命令

坚果

OpenHarmony 三周年征文 三周年连更

终于拿到了爆火全网的进一线大厂程序员必看的1700道java面试题

Java java面试 Java八股文 Java面试题 Java面试八股文

硬核!阿里P8自爆春招面试核心手册,Github上获赞65.7K

Java java面试 Java八股文 Java面试题 Java面试八股文

一文读懂注解的底层原理

老周聊架构

三周年连更

本周参加两个SAP项目面试后的感想

SAP虾客

面试 SAP项目 行业经验

Java并行流:一次搞定多线程编程难题,让你的程序飞起来!

Java你猿哥

Java 多线程 SSM框架 java 并发

终于拿到了阿里技术专家分享的552页大型网站架构实战文档

Java 架构 网站架构

霸榜Github三个月的「架构师成长手册」!成为架构师竟然也有捷径

Java你猿哥

Java 分布式 架构设计 架构师 SSM框架

C生万物 | 分支和循环语句【内含众多经典案例】

Fire_Shield

C语言 三周年连更

Intent的基本使用

芯动大师

组件 intentservice 三周年连更

优化用户旅程:提升4S店销售管理系统的市场竞争力

L3C老司机

产品 产品设计 数字化 用户旅程 服务蓝图

Java面向对象编程基础

timerring

Java

Unity 之 Post Processing后处理不同项目配置(UPR项目配置)

陈言必行

Unity 三周年连更

Spring 事务及传播机制原理详解

Java spring 事务

第五元素奏鸣曲:企业的新数据之道

脑极体

数据

API渗透测试之漏洞发现

阿泽🧸

三周年连更

AI日课@20230413:Prompt Engineering 02 - 原则

无人之路

ChatGPT

2023-4-13 某SAP项目面试小记

SAP虾客

SAP EWM SAP Ariba SAP Workflow SAP PM

京东面试题:说说synchronized和volatile的区别

Java volatile JMM synchronized

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