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.拼图即将来临(也许)

拼图项目感觉有点像“ 延迟 ”一词的同义词。 这个项目有一个从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计划将其完全删除。

甲骨文产品管理高级总监唐纳德·史密斯(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

JDK 9清单:Project Jigsaw,sun.misc.Unsafe,G1,REPL等相关推荐

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

    unsafe jdk9 Java 9距离(希望)数月了,现在该回顾一下即将发生的变化以及您应该采取的措施 Java 9即将来临(我们正在计算到达的日子 ),其中包含一系列新功能和改进功能. 这就是为什 ...

  2. sun.misc.Unsafe苦难告诉我们什么

    Oracle将删除Java 9中的内部sun.misc.Unsafe类 . 尽管大多数人可能对这种变化漠不关心,但其他一些人(主要是图书馆开发人员)并非如此. 博客圈中最近有几篇文章描绘了这种变化所暗 ...

  3. sun.misc.Unsafe操作手册

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  4. 聊聊高并发(十七)解析java.util.concurrent各个组件(一) 了解sun.misc.Unsafe类

    了解了并发编程中锁的基本原理之后,接下来看看Java是如何利用这些原理来实现各种锁,原子变量,同步组件的.在开始分析java.util.concurrent的源代码直接,首先要了解的就是sun.mis ...

  5. 在Java 9中使用sun.misc.Unsafe

    Java 9 EA版本已经发布,现在我们可以看到如何使用sun.misc.Unsafe. 我领导了公开运动,以保留对Java 9的访问,该访问最终成功,从而导致对JEP 260的修订. 那么,事情如何 ...

  6. sun.misc.Unsafe的理解

    前言 以下sun.misc.Unsafe源码和demo基于jdk1.7: 最近在看J.U.C里的源码,很多都用到了sun.misc.Unsafe这个类,一知半解,看起来总感觉有点不尽兴,所以打算对Un ...

  7. 使用sun misc Unsafe及反射对内存进行内省 introspection

    对于一个有经验的JAVA程序员来说,了解一个或者其它的JAVA对象占用了多少内存,这将会非常有用.你可能已经听说过我们所生活的世界,存储容量将不再是一个问题,这个对于你的文本编辑器来说可能是对的(不过 ...

  8. sun.misc.unsafe类的使用

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 这个帖子 ...

  9. Java中的天使和魔鬼sun.misc.Unsafe

    我们在看ConcurrentHashMap源码时经常看到Unsafe类的使用,今天我们来了解下Unsafe类. Java是一个安全的编程语言,它能最大程度的防止程序员犯一些低级的错误(大部分是和内存管 ...

最新文章

  1. 鱼佬:我的数据挖掘之路!
  2. pyinstaller打包生成的exe文件(并设置运行时静默)
  3. 天然气表怎么看多少方_宝宝奶粉的的营养成分表,到底怎么看?
  4. 身为最热门的编程语言,Java求职前景到底如何?
  5. qt.targets(66,3):元素<Import>中的“Project”特性的值无效
  6. 快速排序+统计→奶牛的耳语(洛谷P1296题题解,Java语言描述)
  7. javascript:使用canvas绘图2D图形
  8. 动态规划_leetcode322
  9. 烽火戏诸侯于计算机相关联系,烽火戏诸侯的成语典故
  10. 使用html-table模块生成html格式
  11. swift python 性能_Swift 性能探索和优化分析
  12. Monkey学习笔记三:Monkey脚本编写
  13. 【Docker】给运行的容器添加端口映射
  14. 基础知识——PMIC
  15. 成都千锋培训python就业班
  16. 小红书笔记下沉怎么做到的?
  17. 【Python】输出字母在字符串中位置索引 (20 分)
  18. opencv把图片转换成二进制_Python+OpenCV实现将图像转换为二进制格式
  19. Lamda C++11
  20. 2022 CCF中国软件大会(CCF Chinasoft)“面向人工智能的边缘计算技术”论坛成功召开...

热门文章

  1. Javafx的WebEngine的url加载不输出结果坑,gc回收了局部变量
  2. MySQL 的索引是什么?怎么优化?
  3. java中Date与DateFormat的格式输出
  4. [编程入门]阶乘求和:求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。
  5. ssh(Spring+Spring mvc+hibernate)——DeptDaoImpl.java
  6. mysql common是什么_MySQL common_schema简介
  7. Windows.etc\hosts文件
  8. matlab 定义一个有自变量的方程_常微分方程:(第四章) 高阶微分方程
  9. 转: 记录centos7 安装erlang22.3和rabbitMQ
  10. java数据库编程——元数据(metadata)+web 与企业应用中的连接管理