TEL:15195455103

Java培训 > Java知识 >
同类推荐

对于Java10,你不知道的5件事

作者:南京    来源:南京    发布时间:2020-01-13 09:39    浏览量:193

  Java 9出现之后仅仅过去6个月,现在Java 10已经在敲门了。与它的版本号一样,Java 10提供了10个新特性,本文提供了我认为重要的5个特性(您可以在Open JDK 10项目页面上查看它们)。局部变量类型推断是有争议的热点,但Java 10在JVM中的垃圾收集和容器识别上带来了可喜的变化。

  局部变量类型推断是有争议的热点,但Java 10在JVM中的垃圾收集和容器识别上带来了可喜的变化。

  关于本系列

  所以你认为你了解Java编程? 事实是,大多数开发人员只是浮于Java平台的表面上,仅仅为了完成工作而学习。在这个正在进行的系列中,Java技术深入挖掘了Java平台的核心功能,提出了一些技巧和诀窍,可以帮助你解决即使是棘手的编程挑战。

  Java™开发人员已经习惯了等待新的Java版本发布,但是新的、高频率的发布节奏改变了这一情况。Java 9出现之后仅仅过去6个月,现在Java 10已经在敲门了。再过6个月,我们将迎来Java 11。一些开发人员可能会发现这样的快速发布是多余的,但是新的节奏标志着一个长期需求的改变。

  与它的版本号一样,Java 10提供了10个新特性,本文提供了我认为重要的5个特性(您可以在Open JDK 10项目页面上查看它们)。

1. Java的新版本节奏

  从历史上看,JDK发行的节奏是由大的新特性驱动的。作为近的例子,Java 8以lambda和流的形式引入了函数式编程,而Java 9引入了模块化Java系统。每个新版本都被热切地期待着,但是次要的修复程序经常束之高阁,等待更大的组件版本被终确定。Java的进化落后于其他语言。

  新的高频节奏将Java以更小的增量向前推进。在发布日期准备好的特性将被包括在内,而那些不能被安排在下一个版本中,就在6个月之后。在这个新周期下的第一个Java版本是Java 9,它于2017年10月发布。Java 10于2018年3月发布,Java 11将于2018年9月发布。

  作为新节奏的一部分,甲骨文表示,它将只支持每个主要版本,直到下一个主要版本发布为止。 当Java 11发布时,Oracle将停止支持Java 10。支持Java版本的开发人员必须每6个月迁移一次主要版本。 不希望或不需要频繁迁移的开发人员可以使用LTS(长期支持)版本,该版本每三年更新一次。 目前的LTS版本Java 8将在今年秋季发布Java 11之前得到支持。

2. 局部变量类型推断

  局部变量类型推断是Java 10中显着的特性。在进入JDK 10之前,争论非常激烈,该特性允许编译器推断局部变量的类型,而不是要求程序员明确指定它。

  使用局部变量类型

  顾名思义,局部变量类型推断功能仅适用于局部变量。 它不能用于定义实例或类变量,也不能用于方法参数或返回类型。 但是,您可以在类和增强型循环中使用var,可以从迭代器中推断出类型

  局部变量类型的问题

  1. var掩盖了类型

  你已经看到了var如何提高代码的可读性,但是从另一方面来看,它也可以掩盖它。

  2. var不能与lambda一起使用

  与lambda表达式一起使用时,类型推断效果不佳,主要原因是编译器缺少类型信息。 清单8中的lambda表达式不会被编译。

  3. var不会与菱形操作符混在一起

  与菱形操作符一起使用时,类型推断也不能很好地工作。

北大青鸟软件学校

3、增加、删除和弃用

  删除

  Java 10删除了很多工具:

  命令行工具javah,可以使用javac -h代替。

  命令行选项-X:prof,尽管可以使用jmap工具来访问分析信息。

  政策工具。

  一些从Java1.2开始标记的为已弃用的API也被永久删除了。包括java.lang.SecurityManager.inCheck字段和以下方法:

  java.lang.SecurityManager.classDepth(java.lang.String)

  java.lang.SecurityManager.classLoaderDepth()

  java.lang.SecurityManager.currentClassLoader()

  java.lang.SecurityManager.currentLoadedClass()

  java.lang.SecurityManager.getInCheck()

  java.lang.SecurityManager.inClass(java.lang.String)

  java.lang.SecurityManager.inClassLoader()

  java.lang.Runtime.getLocalizedInputStream(java.io.InputStream)

  java.lang.Runtime.getLocalizedOutputStream(java.io.OutputStream)

  弃用

  JDK 10也弃用了一些API。 java.security.acl包已标记为已弃用,也包括java.security包中包含各种相关的类(Certificate,Identity,IdentityScope,Singer,auth.Policy)。

  此外,javax.management.remote.rmi.RMIConnectorServer类中的CREDENTIAL_TYPES被标记为不建议使用。 java.io.FileInputStream和java.io.FileOutputStream中的finalize()方法已被标记为已弃用。所以在java.util.zip.Deflater / Inflater / ZipFileclasses中的finalize()方法也被弃用。

  添加和包含

  作为Oracle JDK和Open JDK正在进行对接的一部分,Open JDK现在包含Oracle JDK中可用的一部分根证书颁发机构。这些包括Java Flight Recorder和Java Mission Control。此外,JDK 10在java.text,java.time和java.util包的适当位置中增加了对BCP 47语言标记的Unicode扩展的增强支持。另一项新功能允许在不执行全局VM安全点的情况下执行线程回调。这使停止单个线程既可行又便宜,而不是要求你停止所有线程或不需要任何线程。

4.提高容器意识

  如果你部署到像Docker这样的容器,那么这个功能特别适合你。 现在JVM意识到它正在容器中运行,并查询容器中可用处理器的数量,而不是查询主机操作系统。 也可以从外部附加到在容器中运行的Java进程,这使监视JVM进程变得更加容易。

  以前,JVM不知道它的容器,并会向主机操作系统询问活动CPU的数量。 在某些情况下,这会导致JVM过度报告资源,导致多个容器在同一操作系统上运行时出现问题。 在Java 10中,您可以将容器配置为使用主机操作系统的CPU的子集,并且JVM将能够确定正在使用的CPU数量。 您还可以使用-XX:ActiveProcessorCount标志明确指明能够看到的容器化JVM处理器数量。(相关推荐:哪个JAVA编程IDE适合你

  5.应用程序类数据共享

  此特性的用途是提高运行间和多个运行相同代码的JVM启动时间,同时减少内存占用量。 这通过在JVM之间共享关于类的元数据来实现。 JVM的第一次运行收集并归档有关它所加载的类的数据。 然后它将数据文件提供给其他JVM以及该JVM的后续运行,从而节省JVM初始化过程中的时间和资源。 类数据共享实际上已经有一段时间了,但仅限于系统类。 现在这个功能已经扩展到包含所有的应用程序类。


本文内容、图片由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至2353260942@qq.com 举报,一经查实,本站将立刻删除。(如需投稿联系管理员开通!)

© CopyRight njjava.com      苏ICP备14052071号

抢试听名额

名额仅剩66名

教育改变生活

WE CHANGE LIVES