辟谣!Java 9使用指南10大误解,你中了几条?

近日,Java平台集团首席架构师Mark Reinhold参加今年的Devoxx大会。在大会上,Mark Reinhold发表了他对Jigsaw和Java 9的看法,指出了人们以往对Java 9新版本认知的十大误解。

辟谣!Java 9使用指南10大误解,你中了几条?

责任编辑:editor006 作者:许真真 |  2017-09-18 15:08:45 本文摘自:it168网站

近日,Java平台集团首席架构师Mark Reinhold参加今年的Devoxx大会。在大会上,Mark Reinhold发表了他对Jigsaw和Java 9的看法,指出了人们以往对Java 9新版本认知的十大误解。

  误解一:Maven不适用于Java 9

Apache Maven的主席Robert Scholte宣布所有Maven版本3.0及以上版本都能够在Java 9上运行。某些插件可能仍存在一些问题,但在大多数情况下都可以正常运行。

误解二:程序员依赖的工具、库以及框架都不能在Java 9上运行

有许多工具和框架都可以在Java 9上使用,如:

· Maven 3.0.0

· TestNG 6.11

· Log4J 2.8.2

· Clojure 1.8.0 *

· JUnit 4.12 & 5.0.0-M4

· IntelliJ 2017.2

· Spring Boot 1.5.3 & Spring Framework 4.3.8等

Oracle的开发团队向程序员推荐了以上的工具和框架,这些可以确保Java 9的兼容性和访问权限。

误解三:要想使用Java 9就必须模块化

这种想法是错误的。如果要在Java 9中导入一个在Java 8中构建的系统,其实是可以运行的,而且在类路径上运行的问题很少。但现在必须面对的问题是内部API依赖的处理,实施强封装是Jigsaw主要功能之一,但是这样以来我们就无法访问所有非关键的内部API。以下是在JDK增强提案(JEP 260)中所述的JDK特定模块中,仍可以访问的部分关键API:

· sun.misc.{Signal,SignalHandler}

· sun.misc.Unsafe (这个类中的许多方法可以通过variablehandles (JEP 193)实现)

· sun.reflect.Reflection::getCallerClass(int) (此方法的功能可以通过JEP 259以标准形式提供)

· sun.reflect.ReflectionFactory.newConstructorForSerialization

为了让强封装不破坏Java 9的向后兼容性,帮助系统更轻松的迁移到模块化Java平台,Mark Reinhold提出允许非法反射访问的类路径代码默认在JDK 9中,并在未来的版本中禁用。由于Mark Reinhold的提议,我们现在可以通过编译和运行时的命令行标志访问非关键API。

但是,如果你想自己处理这些依赖性API,最好的选择就是将这些API替换成维护的API。

误解四:类似于OSGi的模块在Java 9根本不能运行

这个理解是错误的。只要不使用内部API,OSGi这一类的模块仍然会按照预期方式使用类路径,Java 9并没有阻止使用第三方模块系统。

误解五:Java 9中类路径的代码不能使用某些模块导致Java社区分解

这种想法过于偏激了。类路径上的代码可以读取所有公共以及受保护类型的解析模块,这允许较大系统逐渐迁移。此外,一个可以被a.JAR文件运输的库或者框架可以被转化成一个模块。

误解六:强封装是Java 9被接受的唯一障碍

强封装绝对不是Java 9使用的唯一障碍,人们依赖的内部API现在已经被隐藏了,但是这个版本中还有很多不兼容的东西。Rt.jar已经被一种新的更可靠的格式取代,系统图像的布局也不同,一系列系统类有待提高安全性,这就意味着它们由类加载器加载,但是与引导类加载不同,版本字符串格式被改变了。

  误解七:sun.misc.Unsafe不会在Java 9中,所有的东西都会被中断

这个担心可能是多余的。sun.misc.Unsafe的API和其他常用内部API一样仍可在Java 9中进行访问。

前面说到,Jigsaw的强封装会让我们以前依赖的许多的内部API无法访问。虽然强封装不是唯一的障碍,但也会造成一定的问题。为了解决这个问题,Reinhold提出处理这些API的步骤:

1、 如果在JDK 8中有支持替换——>API封装到JDK 9中。

2、 如果在JDK 8中无支持替换——>API不封装到JDK 9,仍可被外部代码访问。

3、 如果在JDK 9中有支持替换——>抛弃,然后API封装到JDK 9中,而且很有可能在JDK 10中删除。

这个计划针对的是允许非法访问最常用的内部API,直到新的更换标准API引入平台。

  误解八:Jigsaw将修复多版本问题

这个计划好像还没有开始实行,虽然Java社区的一部分人都希望Java 9能够以允许方便快捷的加载给定名称的多个不同模块。相反,来自甲骨文的Alan Bateman建议应该从构建工具和容器入手,来解决同一模块的多版本问题。

误解九:Jigsaw无法修复多版本问题,压根不能用

关于多版本的解决有两个主要的含义:

1、 用类加载器以任何方式工作的API将以不兼容的方式发生变化。任何对类加载器关系做出假设的代码都不会像以前那样工作。

2、 构建工具需要重新优化支持多版本

Jigsaw团队正在努力的解决这些问题。

误解十:现有系统模块化很容易

JDK模块化花了9年的时间,任何大型系统都需要话费大量时间和资源才能从上一个版本转化到下一个版本,而且最终获得的成品可能还会不尽人意。在模块化现有系统之前,权衡成本和收益是必须要考虑的问题。如果你正在构建一个新的项目,那一定要使用模块化。

本文转自d1net(转载)

时间: 2024-12-21 14:58:02

辟谣!Java 9使用指南10大误解,你中了几条?的相关文章

Java主宰全球的10大算法

在开放性论坛Reddit.com上有篇帖子介绍了算法对我们现在生活的重要性,以及哪些算法对现代文明所做贡献最大.如果对算法有所了解,读这篇文章时你可能会问"作者知道算法为何物吗?",或是"Facebook的'信息流'(News Feed)算是一种算法吗?",如果"信息流"是算法,那就可以把所有事物都归结为一种算法.才疏学浅,结合那篇帖子,接下来我试着解释一下算法是什么,又是哪10个算法正在主导我们的世界. 什么是算法? 简而言之,任何定义明确的计

我们对人工智能的10大误解

自从20年前深蓝(Deep Blue)在国际象棋中击败卡斯帕罗夫(Garry Kasparov),该事件就被人们誉为机器智能最权威的证明.谷歌的AlphaGo已经在围棋比赛中以四胜一负(译者注:原文是三场中获胜两局)赢得了韩国棋手李世石,更表明了这些年来人工智能的迅猛进步.机器终会比人类更聪明的预言即将到来,但我们似乎并没有真正理解这个具有划时代意义的事件的影响.   事实上,我们执着于对人工智能的一些严重的.甚至是危险的误解.去年年底,SpaceX公司的联合创始人伊隆·马斯克(Elon Mus

爱上Java和JVM的10大理由

1.高性能JVM Java最初的开发目的"一次编写到处运行",并由虚拟机提供运行平台.没有JVM,Java就必须遵循Ruby和Python的步伐--在痛苦中进一步提高其便携性.随着物联网的出现,一个强大的虚拟机变得越来越重要. 2.核心API 最让人喜欢的就是Java核心API--从它诞生之后就可以完全向后兼容,这样我们就可以开始写更多的Java应用.虽然有无数额外的库和JVM语言可以提供简洁的语言水平,以获取多种核心API功能,但其中大部分实际上是依赖于Java核心API的支配.虽然

Java数组操作的10大方法_java

1.定义一个Java数组 String[] aArray = new String[5]; String[] bArray = {"a","b","c", "d", "e"}; String[] cArray = new String[]{"a","b","c","d","e"}; 第一种是定义了一个数组,并

精华阅读第 12 期 | 最新 App Store 审核指南与10大被拒理由?

很多时候,我们对技术的追求是没有止境的,我们需要不断的学习,进步,再学习,再进步!本文系移动精英开发俱乐部的第12期文章推荐阅读整理,其中涉及到了 Android 数据库框架,架构设计中的循环引用,同时还阐述了如何在iOS中实现抽象类,以及什么是集群和分布式.同时,本文还分享了阿里巴巴的实践分享,如果你在开发一款APP,你也可以读一下<最新 App Store 审核指南与10大被拒理由?>.希望这些文章能对大家有所启发.文章系 ITOM 管理平台 OneAPM 审校整理: 1,Find Con

2013 年开源中国 10 大热门 Java 开源项目

2013 年结束了,我们根据过去一年的用户访问.交流分享和项目本身的更新频度等诸多角度对收录于开源中国的近三万款开源软件进行统计,从而得出前 XX 名最受欢迎的开源软件,仅供参考. 本排行榜主要是针对开源中国社区在2013年度最受欢迎的 10 大热门 Java 开源项目根据用户访问量.讨论和关注等角度进行筛选,从而得出前 10 名的 Java 开源软件列表: JFinal JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大

《Java编码指南:编写安全可靠程序的75条建议》—— 指南10:不要使用clone()方法来复制不可信的方法参数

指南10:不要使用clone()方法来复制不可信的方法参数 创建可变方法参数的防御性副本,可以减轻来自各种安全漏洞的威胁,更多信息请参考<The CERT Oracle Secure Coding Standard for Java>[Long 2012]的"OBJ06-J. Defensively copy mutable inputs and mutable internal components".然而,对clone()方法不当地使用,可以使攻击者利用这一漏洞,提供看

GitHub公布10大热门编程语言:Java好猛

美国代码管理服务GitHub周三公布了该平台上最热门的10大编程语言,以及自2008年GitHub成立以来,热门编程语言的变化趋势. GitHub基于Git的分布式版本控制和代码管理功能,而Git是一款命令行工具.GitHub提供了基于网页的图形化界面,并对桌面端和移动端进行了整合. 尽管并不能准确反映当前市面上最热门的编程语言,但由于GitHub正越来越受欢迎,因此这在一定程度上可以体现出编程语言近几年的发展趋势. 以下为GitHub上当前最热门的10大语言: 1.Javascript 2.J

创业指南:白手起家有10大致富方法

要你有干成大事业的欲望和白手起家的决心,选择你感兴趣的事业作为你终生奋斗的事业且目标明确,一心一意地坚持下去,并按照本书中所介绍的方法去思考,去行动,你就一定会成功. 中国现在尤其需要白手起家的英雄.经济的低迷,国有企业的不景气,下岗人员的增多,许多单位的人浮于事.效益低下以及大学扩大招生后造成的就业压力增大等,所有这一切都表明中国不仅需要一大批资深职业经理人带领[被屏蔽广告]现有的企业走出困境,同时需要一大批白手起家的英雄创造出新的经济增长点和新的就业机会,使中国经济有一个较大的增长,使我们在