关于 Java12 的一切——新特性、安全性和 Switch 表达式语句(示例)

已发表: 2019-04-07

Java 12 - 全新的东西 - Crunchify 的详细信息

19th March 2019 ,Java12 发布。 众所周知, Java12是快速发布的一部分,它在 Java11 发布后仅 6 个月就发布了。

在本教程中,我们将介绍有关 Java12 的所有更改和新功能。

就我个人而言,我的所有开发都切换到了 Java12,但对于生产周期来说还为时过早。 如果您想为所有生产项目切换到 Java12,请将本教程添加为书签。

Java12 有什么新功能? Java12 的新特性:

Java12 中有很多内部和用户工作流相关的特性发生了变化。 让我们来看看 Java 12 里面有什么。

Change-1) 并发类卸载

普通垃圾收集器通常在 GC 循环期间卸载未使用的变量,我们通常会注意到进程中的一些暂停/暂停,或者在此期间 CPU 增加。 通常我们甚至不会注意到这一点。

使用ZGC (Z Garbage Collector) – Java12 也支持并发类卸载。 由于这发生在正常的 GC 周期中,因此没有任何暂停,也没有更多的内存额外使用。

默认情况下,Java12 中启用了 ZGC。 无需更多操作

如何禁用 ZGC?

  • 只需使用 JVM 命令行参数-XX:-ClassUnloading启动您的应用程序

Change-2) 获取有关 JVM Crash 的更多详细信息

当出现 OOM(Out Of Memory)错误或 JVM 崩溃时,Java 通常会创建包含所有详细信息的转储文件。

使用此 JVM 参数,将在 OOM 错误时在/tmp/crunchify/文件夹下创建转储文件。

Java12 中又增加了一个选项:

将创建名为hs_err<pid>.log的新日志文件,其中包含有关 JVM 崩溃的所有详细信息。 如果您看到频繁的崩溃并想要进行更多调试,这对您的生产环境非常有帮助。

默认情况下它是禁用的,但您可以通过添加上面的 JVM 命令行参数来启用广泛的崩溃报告。

Change-3) 紧凑数字格式

java.text 添加了对紧凑数字格式的支持。 100o可以称为1K100000可以称为100K

结果:

Change-4) Java 安全性增强

security-libs/java.security更改:

  • 禁止和允许 java.security.manager 的选项
    • 如果disallow ,则 System. setSecurityManager不能用于设置安全管理器。
  • -groupname 选项添加到 keytool 密钥对生成
    • 用户可以在生成密钥对时指定一个命名组。
  • 自定义PKCS12 keystore生成
    • 包括算法和参数
      • 密钥保护
      • 证书保护
      • 麦克数据
  • 新的 JFR 安全事件
    • 什么是 JFR(Java 飞行记录器)
    • 添加了 4 个新的 JFR 事件
      • jdk.X509证书
      • jdk.X509验证
      • jdk.TLS握手
      • jdk.SecurityPropertyModification

Change-5) JEP 325:切换表达式

Crunchify 的 JEP 325 开关表达式教程

Java12 现在支持增强型Switch statement

  • 基于 Java 12 的case L -> syntax操作。 这里没有任何休息的必要。
  • 开关表达式的使用
    • 这是简化的 switch 语句
    • 如果标签匹配,则仅执行箭头标签右侧的表达式。
    • 不需要中断语句。

CrunchifyJava12SwitchExample.java

IntelliJ IDEA 结果:

Java 12 Switch 语句教程结果 - Crunchify

Change-6) JVM 常量 API

java.lang.invoke.constant :您可能知道,Java 类有一个常量池,它在运行时存储所有操作数。

Java12 添加了用于在运行时调用常量的 API。

从 Java12 中删除的功能:

从 Java12 中删除的功能 - Crunchify Tips

Java12 中已弃用的功能:

Java12 中已弃用的功能 - Crunchify Tips

如果您想在此处包含有关 Java12 的任何方便的教程,请告诉我。