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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pytorch 词嵌入word_embedding2实例(加载已训练词向量)

目录 1、加载已训练好的词嵌入 2、是否需要重新训练词嵌入 3、不重新训练词嵌入时优化器设置

IPv4数据报格式及其语义

IPv4数据报格式及其语义 一、IP数据报的格式如下图所示 版本 首部长度 服务类型 数据报长度 16比特标识 标志 13比特片偏移 寿命 上层协议 首部检验和 32比特源IP地址 32比特目的IP地址 选项(如果有的话) 数据 IPv4数据报格式 二、各部分语…

华景机器人怎么控制_【华景QQ机器人怎么用】华景QQ机器人好不好_使用技巧-ZOL软件百科...

发布日期:2016年02月21日 Release 2 && Release 3新增功能和优化及修复修复严重崩溃问题。全面支持emoji表情。修复某些用户不能登录。轻量级重包处理。优化消息显示。修复一个数组越界错误。修复一个数组下标不能为0错误。加快消息处理速度。UI线程与消息处…

Java命令行界面(第9部分):parse-cmd

parse-cmd库由单个类ParseCmd.java组成,该类是“用于在Java应用程序中定义和解析命令行参数的Java类。” 该库托管在Google Code存档上 ,因此可以随时关闭 。 该JAR似乎也可以在GitHub上使用 。 这篇文章介绍了如何使用parse-cmd 0.0.93处理Java中的命令…

Pytorch--Tensor, Numpy--Array,Python--List 相互之间的转换

1、 Python--List Numpy--Array list = [[1, 2, 4, 8], [0.1, 0.4, 0.9, 0.8]] list_np = np.array(list) print(list_np的维度:,list_np.shape) print(list_np的类型:,type(list_np))运行结果: 2、Python--List Pytorch--Tensor test = [[1, 2, 4, 8], [0.1, 0.4, 0…

Redis的各项功能解决了哪些问题?

Redis是什么 官方简介解释到:Redis是一个基于BSD开源的项目,是一个把结构化的数据放在内存中的一个存储系统,你可以把它作为数据库,缓存和消息中间件来使用。 同时支持strings,lists,hashes,set…

join left semi_HIVE--left semi join

实验:hive> select * from b1;OK1 003 201705111 004 201705121 005 201705132 006 201705143 007 20170515Time taken: 0.041 secondshive> select * from b2;OK1 005 201705132 006 …

java permgen_Java 8:从PermGen到元空间

java permgen您可能已经知道,现在可以下载JDK 8 Early Access 。 这使Java开发人员可以尝试Java 8的某些新语言和运行时功能。这些功能之一是完全删除自Oracle自JDK 7发行以来就宣布的Permanent Generation(PermGen)空间。例如,自…

总结

写在前面 课程名称:软件工程原理及方法 课程链接:https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 作业要求:https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/3393 团队名称:求莫名堂 请…

Pytorch GRU(详解GRU+torch.nn.GRU()实现)

pytorch GRU 目录 pytorch GRU 一、GRU简介1 二、GRU简介2 三、pytorch GRU 3.1 定义GRU ()

同步装饰器来替换线程安全类

您知道什么是线程安全吗? 如果没有,下面是一个简单的示例。 所有类都必须是线程安全的,对吗? 并不是的。 其中一些必须是线程安全的? 又错了。 我认为它们都不必是线程安全的,而它们都必须提供同步的装饰器…

creo减速器建模实例_3.16减速器箱体附件建模

本节内容主要介绍了减速器箱体附件建模,视频时长24分32秒。本节主要通过阵列,拉伸,孔等命令完成创建,操作时注意孔的类型的选择,以及定位基准的选择,学习时要掌握其减速器附件的设计。简要操作步骤&#xf…

回文数

问题 A: 回文数 时间限制: 1 Sec 内存限制: 32 MB提交: 1705 解决: 512[提交][状态][讨论版]题目描述 我们把从左往右和从右往左念起来相同的数字叫做回文数。例如,75457就是一个回文数。当然某个数用某个进制表示不是回文数,但是用别的进制表示可能就…

Pytorch RNN(详解RNN+torch.nn.RNN()实现)

目录 一、RNN简介 二、RNN简介2 三、pytorch RNN 3.1 定义RNN()

git ssh创建分支_【ssh简单版git-server 1】自建git-server

环境:centos和ubuntu系统都可以CentOS release 6.7git version 1.7.1git-server 192.168.50.108git-client 192.168.50.112备注:基于linux系统下做ssh模式的gitserver,需要ssh免密钥,因为git用户是禁止登录的,clone时没…

使用js将后台返回的数据转换成树形结构

将类似如下数据转换成树形的数据: [{ id: 1, name: 1, },{ id: 2, name: 1-1, parentId: 1 },{ id: 3, name: 1-1-1, parentId: 2 },{ id: 4, name: 1-2, parentId: 1 },{ id: 5, name: 1-2-2, parentId: 4 },{ id: 6, name: 1-1-1-1, parentId: 3 },{ id: 7, name:…

HMM及维特比算法

参考 HMM:https://blog.csdn.net/sinat_25346307/article/details/79119366 Viterbi算法:https://blog.csdn.net/shenxiaoming77/article/details/79228378 一、HMM定义 以词性标注为例说明 图1 词性标注任务1、问题:如图1所示&#xff0c…

java 大文件 处理_用Java处理大文件

java 大文件 处理我最近不得不处理一组包含历史逐笔交易的外汇市场数据的文件,并很快意识到使用传统的InputStream都无法将它们读取到内存中,因为每个文件的大小都超过4 GB。 Emacs甚至无法打开它们。 在这种特殊情况下,我可以编写一个简单的…

python项目结构目录结构采用的是_python 项目目录结构设置

python 项目目录结构设置为项目设置目录结构是为了将功能类似的文件放置在同一目录内,增强项目的可读性和可维护性。如果一个python项目功能单一,代码量很小,那就没必要设置的这么复杂。下图是一个示例项目的目录结构:1&#xff0…

HMM和CRF 条件随机场详解

转载于 https://blog.csdn.net/qq_42901761/article/details/104206799 这位大神ffffatgoose总结的很好