Java12新增特性

前言

前面的文章,我们对Java9、Java10、Java11的特性进行了介绍,对应的文章如下

Java9新增特性

Java10新增特性

Java11新增特性

今天我们来介绍一下Java12版本的新增特性

版本介绍

Java 12是Java SE的第12个版本,于2019年3月19日发布。这个版本主要为了帮助开发人员更加高效的进行编程工作,提高Java的性能和稳定性,并增加新特性和API。

Java 12的维护时间主要分为两个阶段,公共更新阶段和维护更新阶段。
公共更新阶段为期6个月,在这个阶段中,Oracle提供安全更新、错误修复和增强功能更新,还向企业客户提供预览版本以测试新功能,并在下一个长期支持(LTS)版本中进行采纳。
维护更新阶段则针对企业客户,提供长期支持版本的错误修复和安全更新。

特性列表

Java 12的版本特性主要包括:

  • Shenandoah垃圾收集器 :这是一种低延迟、高吞吐量的垃圾收集器,专为大型内存应用程序设计。它使用了一种名为IETF RMT(Improved Efficiency of Transport)协议的分布式预期缩短算法,以实现暂停时间的缩短。
  • Switch表达式 :这个新功能使得编写Switch语句时更加简单和灵活。具体而言,Switch表达式允许每个Case分支都使用箭头操作符(->),以及省略break语句并返回一个值。
  • JVM常量API :这个新功能引入了对关键类文件和运行时工件的建模,特别是可从常量池加载的常量。
  • AArch64实现 :只保留了一个AArch64实现,删除了与arm64相关的所有源,同时保留了32位ARM实现和64位aarch64。

此外,Java 12还引入了微基准测试套件JDK源码,使开发人员可以轻松运行现有的微基准测试并创建新的基准测试。以上信息仅供参考,如有需要,建议咨询专业的技术人员。

代码示例

  • Switch表达式:

public class SwitchExpressionExample {
    public static void main(String[] args) {
        int day = 2;
        String dayName = switch (day) {
            case 1 -> "Monday";
            case 2 -> "Tuesday";
            case 3 -> "Wednesday";
            case 4 -> "Thursday";
            case 5 -> "Friday";
            case 6 -> "Saturday";
            case 7 -> "Sunday";
            default -> throw new IllegalStateException("Invalid day: " + day);
        };
        System.out.println(dayName);
    }
}

这个例子中,我们使用Switch表达式来根据给定的天数返回相应的星期名称。在Switch表达式中,我们使用了箭头操作符(->)来将每个Case分支映射到一个值。在这个例子中,如果输入的天数不是1到7之间的整数,将会抛出一个异常。

拓展

Shenandoah垃圾回收器

Shenandoah是一个美国雪兰多大学(Shenandoah University)的名字,该大学成立于1875年,位于美国弗吉尼亚州。另外,Shenandoah也是一条小河的名称,因太有名,整个区域的国家公园也以“Shenandoah”命名。

Shenandoah是Oracle开发的另一个垃圾收集器,其目标是实现一种能在任何堆内存大小下都可以把垃圾收集的停顿时间限制在十毫秒以内的垃圾收集器。
Shenandoah采用了基于Region的内存布局,在标记阶段采用了并发标记,且在实现上使用了G1垃圾收集器的很多代码。因此,Shenandoah与G1有很多相同点。同时,Shenandoah也具有自己的一些特点,例如它不仅需要在并发标记阶段实现并发,还需要在标记清除阶段实现并发。
总的来说,Shenandoah是一种高效的垃圾回收器,有助于提高Java程序的性能和响应速度。

JVM垃圾回收器

垃圾回收器是Java虚拟机(JVM)中的一种自动内存管理机制,它的主要作用是自动追踪所有正在使用的对象,并标记为垃圾,然后释放这些对象所占用的内存空间。

垃圾回收器可以按照不同的方式进行分类,例如根据回收机制、回收范围、回收速度等。其中,根据回收机制可以分为标记-清除、复制、标记-整理和分代收集等;根据回收范围可分为全局回收和局部回收;根据回收速度可分为并发回收和停止-复制回收等。

常见的垃圾回收器包括Serial、Parallel、CMS和G1等。其中,Serial收集器是最基本的一种,它在进行垃圾回收时会暂停其他所有工作线程,因此也被称为“Stop The World”收集器;Parallel收集器则可以在多核CPU环境下并行进行垃圾回收,因此可以显著缩短垃圾回收停顿时间;CMS(Concurrent Mark Sweep)收集器则主要面向服务端应用,在并发环境下尽可能减少独占式垃圾回收的停顿;G1(Garbage-First)收集器则是面向服务端应用的垃圾收集器,它具备并行与并发、分代收集和空间整合等特点。

垃圾回收器的具体实现细节可能会因不同的JVM实现而有所不同,但它们的基本原理和目标是相同的:尽可能减少内存碎片和停顿时间,提高内存利用率和程序性能。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

口袋参谋:新品上架如何实现月销1w?

​如今在淘宝天猫上,开新店上新品,想要出单是很不容易的。很多商家在新品上架之后,都是非常焦虑的,总是在担心一直没销量该咋办? 以下这几个方法,大家不妨尝试一下; ①打造店铺和产品人群的一致…

MYSQL5.7和MYSQL8配置主从

1、创建专门主从的账号 #登录 mysql -u root -p #创建用户 我这里用户名为test5,注意这里的ip是从库服务器的ip CREATE USER test5192.168.1.20 IDENTIFIED WITH mysql_native_password BY xxxxx; #给主从复制账号授权 grant replication slave on *.* to test5192…

基于Qt Linux开发板USER-KEY按键实现

介绍如何在 Qt 应用上使用嵌入式 GET6818 Linux 开发板 上的按键。 工具:Qt Creator 5.14.2 平台:windows ## 资源简介 在GET6818 开发板,开发板板载资源上有两个用户按键。如下图原理图(下图开发板的按键原理图)。 ## 应用实例 想要监测这个 KEY0,首先出厂内核已经…

Spring的缓存机制-循环依赖

群公告 Java每日大厂面试题: 1、Spring 是如何解决循环依赖? 答案:三级缓存,简单来说,A创建过程中需要B,于是A将自己放到三级缓存里面,去实例化B,B实例化的时候发现需要…

01 计算机图形学概述

什么是图形学 合成和操作视觉信息。 图形学的应用 游戏 电影 动画 模拟 设计 可视化 虚拟现实VR&增强现实AR 电子绘画 图形化UI 字体 图形学的挑战 思维上的挑战 创建与虚拟世界互动需要了解物理世界的各个方面新的计算方法,显示,技术 技术上…

SpringBoot不同环境加载不同配置文件(dev,sit,uat)

目录 一、springboot的profile配置profile多配置文件 二、maven的profiles策略 我们在使用spring的时候,一般都会有不同的环境需要部署:开发环境、测试环境和验收环境,而不同的环境则会有不同的配置,比如数据库ip。解决这个问题&a…

视频批量剪辑:视频合并技巧全攻略,成为视频剪辑专家

在视频制作的过程中,我们常常会遇到需要将多个视频片段合并的需求。这不仅涉及到视频的排列和组合,还需要考虑过渡效果、音频同步等因素。在视频制作过程中,视频批量剪辑是一个非常关键的环节。它可以大大提高工作效率,减少重复劳…

经典OJ题:奇偶链表

目录 题目: 示例: 解题思路: 方法一:双链表链接法 图例: 代码演示: 解题效果: 方法二:奇偶指针 图例: 代码演示: 题目: 给定单链表…

双H桥直流马达步进电机驱动芯片SS8833E

由工采网代理的率能SS8833E是一款适用于有刷直流或双极步进电机的集成电机驱动芯片;采用eTSSOP16封装;该器件集成了两个PNMOS H桥和电流调节电路;电机输出电流可以由外部脉宽调制器(PWM)或内部PWM电流控制器控制。 工…

【Swagger 】提示 ‘Unable to find specification for group default‘

接口文档用的好好的,突然就开始找不到模块 问题记录 1. 接口文档访问不了 swagger 提示 ‘Unable to find specification for group default’ unable to find specification for group default 找不到组默认值的规范 原因:实体类里面是属性使用public…

补坑:Java的字符串String类(2):一些OJ题目

有关String的方法可以看看我上一篇博客 补坑:Java的字符串String类(1)-CSDN博客 387. 字符串中的第一个唯一字符 - 力扣(LeetCode) 给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它…

计算机提示找不到xinput1_3.dll怎么办?6个xinput1_3.dll丢失完美解决方案分享

xinput1_3.dll是Windows操作系统中的一个重要动态链接库文件,它负责处理游戏控制器和其他输入设备的相关功能。当计算机出现xinput1_3.dll缺失的问题时,可能会导致无法正常使用游戏控制器或其他输入设备。下面是针对这个问题的6个解决方法: 方…

物联网AI MicroPython学习之语法 uhashlib哈希算法

学物联网,来万物简单IoT物联网!! uhashlib 介绍 实现二进制数据散列算法,支持sha256,sha1,MD5。 接口介绍 sha256 - 创建一个SHA256哈希对象 参数原型:hash_obj uhashlib.sha256([bytes]) …

时序预测 | MATLAB实现WOA-CNN-GRU-Attention时间序列预测(SE注意力机制)

时序预测 | MATLAB实现WOA-CNN-GRU-Attention时间序列预测(SE注意力机制) 目录 时序预测 | MATLAB实现WOA-CNN-GRU-Attention时间序列预测(SE注意力机制)预测效果基本描述模型描述程序设计参考资料 预测效果 基本描述 1.MATLAB实现…

threejs(11)-shader着色器打造漫天飞舞孔明灯

src/main/main.js import * as THREE from "three";import { OrbitControls } from "three/examples/jsm/controls/OrbitControls"; import gsap from "gsap"; // 动画库 import vertexShader from "../shaders/flylight/vertex.glsl"…

类和对象(2):构造函数,析构函数

一、构造函数 1.1 概念 构造函数是一种特殊的成员函数,名字与类名相同,创建类类型对象时编译器自动调用——初始化对象,在对象整个生命周期内只调用一次。 PS: 1. 构造函数无返回值;2. 构造函数支持重载。 class Date { public:…

Image透明度点击简述以及Unity2019之后存在无法点击的BUG修复

前言 自Unity2019之后Unity将UGUI模块从内置库修改成了通过PackageManger引入的方式。Image就来源于com.unity.modules.imgui模块。其实代码大体代码跟2018是一致的,但是还是有些细微差别,Image透明度点击不命中就是2019之后才有的问题,2018…

提升中小企业效率的不可或缺的企业云盘网盘

相比之大型企业,中小型企业在挑选企业云盘工具更注重灵活性和成本。那么市面上有哪些企业云盘产品更适合中小企业呢? 说起中小企业不能错过的企业云盘网盘,Zoho Workdrive企业云盘绝对榜上有名! Zoho Workdrive企业云盘为用户提…

打印图形

题目描述 由键盘输入一个大写字母 ( 到 中的任意一个 ) ,输出如下图所示由相关大写字母组成的图形。 所输入的字母一定为输出文件的第一个字符( 位于图形的左上角 ) ,其余部分的字母构成规律和分布由样例给出。 输入格式 一行,仅为一个大写…

JavaScript基础入门03

目录 1.条件语句 1.1if 语句 1.1.1基本语法格式 1.1.2练习案例 1.2三元表达式 1.3switch 2.循环语句 2.1while 循环 2.2continue 2.3break 2.4for 循环 3.数组 3.1创建数组 3.2获取数组元素 3.3新增数组元素 3.3.1. 通过修改 length 新增 3.3.2. 通过下标新增 …