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

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

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

相关文章

DAO 学习笔记

文章目录什么是 DAO?如何写 DAO?示例代码什么是 DAO? Data Access Object(DAO),数据访问对象/数据存取对象。DAO 是封装数据库访问逻辑的组件/类 。 定义一个类,这个类中的方法封装了数据库访问逻辑,要访问数据库时,只要调用…

dc/os_DC / OS中具有Java和数据库应用程序的服务发现

dc/os该博客将展示一个简单的Java应用程序如何使用DC / OS中的服务发现与数据库进行对话。 为什么要进行服务发现? 应用程序通常由多个组件组成,例如应用程序服务器,数据库,Web服务器,缓存和消息传递服务器。 通常&am…

python进阶项目设计_Python进阶循环设计

之前在“循环”一节,我们已经讨论了Python最基本的循环语法。这一节,我们将接触更加灵活的循环方式。1. 利用range(), 得到下标在Python中,for循环后的in跟随一个序列的话,循环每次使用的序列元素,而不是序列的下标。之…

python调试器入门教程_PyCharm入门第一步(二)——调试第一个Python应用|python基础教程|python入门|python教程...

https://www.xin3721.com/eschool/pythonxin3721/第2步:调试您的第一个Python应用程序找出问题的根源PyCharm报告运行时错误:a ZeroDivisionError。深入研究一下代码,找出问题所在。这里可以使用PyCharm调试器来查看代码中发生了什么。要开始…

Struts2请求处理的内部流程图/结构图/原理图(版本二)

文章目录请求处理流程图流程说明请求处理流程图 流程说明 第 1 步: 客户端初始化一个指向 Servlet 容器(例如 Tomcat)的请求,例如:在浏览器中输入 http:localhost:8080/Struts2/helloworld/helloworldAction.action …

jboss 配置上下文路径_为单个Web应用程序配置多个上下文根– JBoss

jboss 配置上下文路径有时&#xff0c;我们通过在jboss-web.xm l中定义一个来对应用程序进行更改&#xff0c;以支持利用JBoss功能的多个上下文根&#xff0c;如下所示&#xff1a; webapp / WEB-INF / jboss-web.xml&#xff1a; <?xml version"1.0" encoding…

xampp mysql 查询很慢_如何开启mysql的慢查询机制

1 在mysql中默认是不会开启慢查询日志功能的&#xff0c;我们可以使用show variables like ‘%slow%‘来查看一下。结果如下&#xff1a;参数说明&#xff1a;log_slow_queries表示服务器端是否开启慢查询日志记录功能&#xff0c;slow_query_log表示mysql监测满查询的功能是否…

python3.7打包exe坑_[求助]入坑学习python 需要装pyinstaller打包成exe

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼E:\Python>pyinstaller -F E:\Python\123.py142 INFO: PyInstaller: 3.2.1142 INFO: Python: 3.5.3142 INFO: Platform: Windows-7-6.1.7601-SP1143 INFO: wrote E:\Python\123.spec144 INFO: UPX is not available.146 INFO: E…

uaa 授权_使用UAA OAuth2授权服务器–客户端和资源

uaa 授权在上一篇文章中&#xff0c;我介绍了如何使用Cloud Foundry UAA项目启动OAuth2授权服务器&#xff0c;以及如何使用OAuth2授权代码流程中涉及的一些参与者来填充它。 我在Digital Ocean网站上发现这篇文章在描述OAuth2授权代码流方面做得很好&#xff0c;因此&#xf…

谈谈Java编程中的拦截器与过滤器的区别

拦截器是基于 Java 反射机制的&#xff0c;而过滤器是基于函数回调的。 过滤器依赖于 Servlet 容器&#xff0c;而拦截器不依赖于 Servlet 容器。 拦截器只能对 Action 请求起作用&#xff0c;而过滤器则可以对几乎所有请求起作用。 拦截器可以访问 Action 上下文、值栈里的…

电影推荐系统 python简书_文章推荐系统 | 十四、推荐中心

在前面的文章中&#xff0c;我们实现了召回和排序&#xff0c;接下来将进入推荐逻辑处理阶段&#xff0c;通常称为推荐中心&#xff0c;推荐中心负责接收应用系统的推荐请求&#xff0c;读取召回和排序的结果并进行调整&#xff0c;最后返回给应用系统。推荐中心的调用流程如下…

获取请求的url java_Java获取此次请求URL以及服务器根路径的方法

一、 获取此次请求的URLString requestUrl request.getScheme() //当前链接使用的协议"://" request.getServerName()//服务器地址 ":" request.getServerPort() //端口号 request.getContextPath() //应用名称&#xff0c;如果应用名称为 request.getS…

java 平台级模块系统_Java平台模块系统公众审查未能通过

java 平台级模块系统在过去的几周里&#xff0c;Java世界中的戏剧&#xff0c;阴谋和政治活动异常高涨&#xff0c;最终在本周的JSR 376 Java平台模块系统公共评审投票中达到了顶峰。 Java模块化&#xff08;包括Java平台模块系统&#xff08;JPMS&#xff09;&#xff09;可以…

ps背景不变换字_PS教程:复杂背景中,如何利用通道轻松抠出发丝?

点击图片 1元抢购 PS、PR、AE等课程活动无缝抠图复杂背景当我们常用的钢笔抠图解决不了细碎的头发丝时我们可以用通道进行抠图&#xff0c;换背景在复杂的背景中把头发丝抠出来配套PS素材请到QQ群&#xff1a;565256668下载首先打开素材&#xff0c;我们发现背景比较复杂&…

java中$和 的区别详解_Mybatis之#{}与${}的区别使用详解

1.两种取值方式的差异mapper.xml映射文件select * from t_emp WHERE emp_id${id} and emp_name#{name}java查询代码 params 为 id1 ,name”小红”Testpublic void testSelect() {InputStream resourceAsStream ConfigTest.class.getResourceAsStream("../classes/mybatis…

阿里云 ram 容器镜像_容器中Java RAM的使用:不会丢失内存的5大技巧

阿里云 ram 容器镜像在本文中&#xff0c;我们希望分享Java内存管理的细节以及容器内部的弹性&#xff0c;这些细节乍一看并不明显。 在下面&#xff0c;您将找到要注意的问题列表以及即将发布的JDK版本中的重要更新&#xff0c;以及针对核心痛点的现有解决方法。 我们收集了5…

python 图表美化_你的图表不美观怎么办,Python实现数据可视化帮你实现

之前突然看到一个用Python实现数据可视化的技术&#xff0c;小编觉得解决了生活中的好多问题&#xff0c;大家一起来看看这个神器。1、主页首先&#xff0c;这个主页的设计就是我非常喜欢的风格&#xff0c;简单清晰&#xff0c;第一眼就让人有特别清爽的感觉&#xff0c;不愧是…

java堆内存剩余多少合理_Java堆内存的10个要点

我刚开始学习Java编程时&#xff0c;可不知道什么是堆内存或堆空间(heap space)&#xff0c;甚至根本不管对象创建时都放在哪里去了。正式了写一些程序后&#xff0c;经常会遇到java.lang.outOfMemoryError等错误&#xff0c;我才开始关注堆内存。对大多数程序员都经历过这样的…

Struts2请求处理的内部流程图/结构图/原理图(版本一)

流程说明&#xff1a; 1.客户端浏览器&#xff08;Client&#xff09;向服务器发送一个 http 请求&#xff08;HttpServletRequest&#xff09; 2.Container&#xff08;容器&#xff09; 通过 web.xml 映射请求&#xff0c;并获得控制器&#xff08;Controller&#xff09;的…