unsafe jdk9_JDK 9清单:Project Jigsaw,sun.misc.Unsafe,G1,REPL等

unsafe jdk9

Java 9距离(希望)数月了,现在该回顾一下即将发生的变化以及您应该采取的措施

Java 9即将来临(我们正在计算到达的日子 ),其中包含一系列新功能和改进功能。 这就是为什么我们决定创建一份清单来准备自己的事情,以及可能需要我们更改或改编我们代码的任何事情的原因。

在下面的文章中,我们捆绑了一些您应该了解的新功能,并了解它们可能会(或可能不会)影响我们编写代码的方式。 系好安全带,我们将探索一个新的Java版本。

1.符合默认的垃圾收集器

Java 9附带有Garbage First Garbage Collector(G1 GC)作为其默认的垃圾收集器(尽管我们仍然可以根据需要切换它)。

G1是服务器样式的垃圾收集器,设计用于具有大内存的多处理器计算机。 它与其他垃圾收集器之间存在许多差异,包括串行,并行和CMS,我们在上一篇文章中已经介绍了其中的一些。

为了让您快速浏览,我们将重点介绍收集器之间的主要区别之一-结构。 从Java 8开始,垃圾收集器将堆分为两部分:

  • 年轻一代–所有新对象均已分配并老化
  • 老一代–用于存储长期存在的物体

(直到Java 8,永久生成的第三部分,其中包含JVM所需的元数据,用于描述应用程序中使用的类和方法)。

使用G1,堆被划分为一组大小相等的堆区域,每个堆区域都是一个连续的虚拟内存范围。 G1支持大于4GB的堆,并且是一个并行,并发和渐进压缩的低中断垃圾收集器。

G1已在JDK 7和8中得到支持,因此您可以立即尝试使用它 ,看看它是否适合您的应用程序。 如果您不喜欢更改,或者只是喜欢使用旧的垃圾收集器之一,请不要担心。 您仍然可以将选择的垃圾收集器设置为JVM启动参数的一部分,因此它不会受到此更改的影响。

2.拼图即将来临(也许)

拼图项目感觉有点像“ Delayed ”这个词的同义词。 这个项目有一个从Java 7开始向Java 8过渡到Java 8并最终作为Java 9的一部分推迟Java版本的历史。

难怪,由于项目的复杂性。 Jigsaw旨在使Java模块化并将JRE分解为可互操作的组件。 这意味着您将能够针对项目实际需要的组件创建按比例缩小的运行时Jar(rt.jar)。

该项目旨在使Java可扩展到小型计算设备,提高安全性和性能,并主要使开发人员更容易构建和维护库。

这是一个至关重要的项目,因此必然会有一些挫折和延误。 最近的延迟来自IBM和Red Hat,它们都是Java社区过程执行委员会(JCP)的成员,他们对该项目投了反对票。

两家公司表示对当前的Jigsaw项目不满意,当时Red Hat建筑部副总裁Scott Stark 指出: “我们对Jigsaw的实施决策以及范围和共识提出了许多担忧。专家小组的努力”。

斯塔克在电子邮件中表示:“就目前而言,红帽不会投票赞成JPMS(Java平台模块系统)的公共评审草案,因为它不符合Java社区的最大利益”。

IBM高级技术人员Tim Ellison加入了该决定,并宣布 “ IBM也投票反对”,这反映了我们的立场,即JSR(Java规范请求)目前尚不准备超越公开审查阶段。并进行最终草案草案”。

看起来,Oracle可能需要重新考虑项目Jigsaw。 但就目前而言,我们将继续追溯到最新的更新发行日期

3. Unsafe现在是Java 9的正式组成部分

从Java 6开始,sun.misc.Unsafe是JVM中的关键API之一,但是它仅打算由核心Java类使用,而不能由开发人员自己使用。 我们怎么知道? 由于唯一的构造函数已被私有化,因此其单例实例也被私有化。

该库本身是用于执行低级, 不安全操作的方法的集合。 我们知道,标题已将其放弃。 该库的用途之一是使用allocate Instance方法跳过对象初始化阶段或绕过构造函数中的安全检查。

但是,“下午知道早晨从未怀疑过的事情。” 许多库开始使用Unsafe,它成为许多项目的关键库。 由于不安全,Oracle计划将其完全删除。

Oracle产品管理高级总监唐纳德·史密斯(Donald Smith) 表示: “ sun.misc.Unsafe必须在火灾中死亡。 这是-等待-不安全。 它一定要走。” 哎哟。 可以想象,Java社区对此并不满意,并反对这一决定。

花费了一段时间,但最终社区赢得了胜利,并且即将Unsafe封装在Java 9中。为了使其安全起见,此类中的许多方法的功能都可以通过变量handle来使用。

4. REPL

Java 9即将引入JShell,这是第一个正式的Java REPL(Read-Eval-Print-Loop)。 到目前为止,在Java中还没有“本地”的REPL方法。 它实际上是什么意思? 如果我们想运行几行Java来快速地将它们自己检出,则必须将它们包装在单独的项目或方法中。

可以通过替代解决方案(例如Java REPL Web控制台就是其中之一)来评估代码段,例如声明,语句和表达式,但是JShell补充了本机和官方支持。

换句话说,我们现在就可以在编写代码片段后立即对其进行测试,而不必完成整个项目。 如果您想今天尝试一下,请查看我们的JShell动手评论

有趣的事实: Oracle指出JShell是根据学术反馈创建的。 学校采用具有REPL功能的语言,因为它有助于降低编程的初始学习曲线。

5.有趣的新语言变化

JDK 9中对核心库进行了一些增强,因此我们决定专注于最重要的更改。 第一个是Stack-Walking API ,它引入了一种处理堆栈跟踪的正式方法。 此类包括遍历堆栈的方法,可在我们感兴趣的任何时候为我们提供当前线程的概述。

换句话说,Stack-Walking API将更改您遍历堆栈跟踪的方式。 如果您想了解有关此新功能的更多信息并了解我们的想法,请在此处查看我们的完整概述。

Java 9还将引入java.util.concurrent.Flow库,该库将包含嵌套在新类Flow中的支持Reactive Streams发布-订阅框架的接口。 查看我们对该类及其带来的变化的更深入的了解。

其他将更新的库包括Process API ,它将改善对操作系统进程的控制和管理; Compact Strings将为字符串提供更节省空间的内部表示形式; Enhanced Deprecation ;改进@Deprecated注释,以提供有关规范中API的状态和预期配置

Java 9还将包括一组小的语言更改集,作为Project Coin的一部分,从合法标识符名称集中删除下划线(从Java 8开始),并支持私有接口方法。

这只是即将进行的更改的一小部分,您可以在此处查看 Oracle所做的完整正式列表。

最后的想法

Java 9即将摇摇欲坠,对此我们再也不会感到兴奋。 但是,虽然可能很想在正式发布之日开始使用它,但我们建议您在开始使用它之前检查一下环境和代码中需要做的事情。 或如Ice Cube所说, 在破坏自己之前最好先检查一下自己 。 安全要比后悔好,尤其是在代码方面。

如果您是早期采用者,或者迫不及待想尝试Java 9,则可以立即进行检查

翻译自: https://www.javacodegeeks.com/2017/05/jdk-9-checklist-project-jigsaw-sun-misc-unsafe-g1-repl.html

unsafe jdk9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值