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

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

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

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

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

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

  3. openJDK之sun.misc.Unsafe类CAS底层实现

    2019独角兽企业重金招聘Python工程师标准>>> 注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html,而后自己结合 ...

  4. 【Java报错】记录一次 sun.misc.Unsafe.park(Native Method) Conflicting setter definitions for property 导致的内存泄露

    1. 报错信息 2021-10-29 08:44:56 WARN [,,,] [main] o.a.c.loader.WebappClassLoaderBase - The web applicati ...

  5. sun.misc.Unsafe操作手册

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

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

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

  7. 字体对话框java实验_Java Web安全 || Java基础 sun.misc.Unsafe

    点击上方"凌天实验室","星标或置顶公众号" 漏洞.技术还是其他,我都想第一时间和你分享 " [历史]已连载更新全部内容:[菜单栏]-[JAVA SE ...

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

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

  9. sun.misc.Unsafe和堆外内存

    sun.misc.Unsafe类允许您执行许多Java中不应该做的事情,但是在非常特殊的情况下仍然有用. 必须在99%的时间避免这种情况,但是在极少数情况下,这是唯一有意义的解决方案. 这篇文章考虑了 ...

最新文章

  1. C/C++语言简介之关键字
  2. CSS3动画---移动端上下固定高度,中间自适应
  3. mysql多数据源_egg-mysql配置多数据源
  4. python中元组的特性
  5. Redis入门到入土教程_2 远程连接redis
  6. 用ASP.NET开发胖客户端应用程序
  7. OpenCV46:立体图像的深度图|Depth Map
  8. 自学移动端(APP)自动化测试
  9. 超强免费OCR文字识别工具推荐
  10. “win+PrtSc”图片没有保存到图片文件夹中的问题
  11. win10系统没有信息服务器地址,Win10没有有效的ip配置
  12. 使用Scrapy(二)编写抓取规则
  13. 【项目】Online Judge(在线评判系统)
  14. MySQL 事务特性以及事务隔离级别
  15. VESA 标准查看工具
  16. iOS启动页面图片尺寸标准
  17. VS竞技平台2.1版优化
  18. Unity Android 路径下的斜杆和反斜杠
  19. 堆优化prim算法C语言,最小生成树(二)--prim算法实现以及堆优化
  20. Object R3TR DOCT ZLOGIN_SCREEN_INFO can not be modify

热门文章

  1. YBTOJ危桥通行洛谷P3163:危桥通行(网络流)
  2. Loj#3077-「2019 集训队互测 Day 4」绝目编诗【结论,虚树,鸽笼原理】
  3. CF401C-Team【构造】
  4. YbtOJ#20066-[NOIP2020模拟赛B组Day4]筹备计划【线段树,树状数组】
  5. ssl提高组周二备考赛【2018.10.30】
  6. ssl提高组周三备考赛【2018.10.17】
  7. 2017西安交大ACM小学期 文本查找[AC自动机]
  8. 2017西安交大ACM小学期数据结构 [线段树]
  9. Spark入门(十八)之多表关联
  10. 基于消息中间件RabbitMQ实现简单的RPC服务