Java12新增特性

news2024/11/18 12:29:14

前言

前面的文章,我们对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实现而有所不同,但它们的基本原理和目标是相同的:尽可能减少内存碎片和停顿时间,提高内存利用率和程序性能。

在这里插入图片描述

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

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

相关文章

fastANI-基因组平均核酸一致性(ANI)计算

文章目录 简介安装使用Many to Man-使用基因组路径作为输入One to One 结果其他参数说明可视化两个基因组之间的保守区域并行化 简介 FastANI 是为快速计算全基因组平均核苷酸同一性(Average Nucleotide Identity,ANI)而开发的,无…

【第七章】软件设计师 之 程序设计语言与语言程序处理程序基础

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 1、前言 正规式 2、编译过程 编译型&…

深度解析找不到msvcp120.dll相关问题以及解决方法

​在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp120.dll丢失”。这个错误通常会导致某些应用程序无法正常运行,给用户带来很大的困扰。那么,如何解决msvcp120.dll丢失的问题呢?本文将为大家介绍…

xml schema中的sequence的含义

https://www.w3.org/TR/xmlschema-1/#element-sequence xml schema中的sequence的含义:包含的元素必须按规定的顺序出现。通过属性maxOccurs和minOccurs可以定义最多、最少出现的次数。最多可以定义不限制次数,最少可以定义0次。默认是最少出现1次&…

pyTorch Hub 系列#4:PGAN — GAN 模型

一、主题描述 2014 年生成对抗网络的诞生及其对任意数据分布进行有效建模的能力席卷了计算机视觉界。两人范例的简单性和推理时令人惊讶的快速样本生成是使 GAN 成为现实世界中实际应用的理想选择的两个主要因素。 然而,在它们出现后的很长一段时间内,GA…

02:2440---时钟体系

目录 一:时钟控制 1:基本概念 2:时钟结构图 3:结构图分析 4:总线 5:寄存器 A:FCLK--MPLLCON B:HCLK和PCLK--CLKDIVN C:注意 二:上电复位 1:上电复位 2:时钟选择 三:代码 一:时钟控制 1:基本概念 S3C2440A中的时钟控制逻辑可以产生所需的时钟信号,包括C…

node插件express(路由)的插件使用(二)——cookie 和 session的基本使用区别

文章目录 前言一、express 框架中的 cookie0、cookie的介绍和作用1. 设置cookie2.删除cookie3.获取cookie(1)安装cookie-parser(2)导入cookie-parser(3)注册中间件(4)获取cookie&…

类和对象(3):拷贝构造函数

引入: class Stack { public:Stack(int capacity 3){_a (int*)malloc(sizeof(int) * capacity);if (nullptr _a){perror("malloc");exit(-1);}_top 0;_capacity capacity;}~Stack(){free(_a);_top _capacity 0;_a nullptr;}private:int* _a;int _…

终止进程,GPU显存仍被占用 | kill -9彻底杀死进程

问题描述:在Linux终端把进程终止后,发现显存没有被释放出来! 显示所有进程 ps aux|grep python杀死单个进程 kill -9 PID杀死多个进程 kill -9 PID PID PID...结果如下,显存已经被释放出来了!

【操作系统】1.1 操作系统的基础概念、功能以及特性

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

gpt支持json格式的数据返回(response_format: ‘json_object‘)

Api.h5.chatCreateChatCompletion({model: gpt-3.5-turbo-1106,token: sk-f4fe8b67-fcbe-46fd-8cc9-fd1dac5d6d59,messages: [{role: user,content:使用json格式返回十二生肖,包含中文名和英文名,[{id:"1", enName:"", cnName: &quo…

Python 多进程多线程

多任务 并发:在一段时间内交替执行多个任务 并行:在一段时间内同事一起执行多个任务 进程 Process 进程:一个程序运行在系统之上, 便称这个程序喂一个运行进程,并分配进程ID方便系统管理。操作系统进行资源分配和调…

Android开发之apk瘦身计划

为什么apk越来越大? 1.项目不断发展,功能越多,代码量增加的同时,资源文件也在不断的增多。 2.app支持的主流dpi越来越多,如ldpi、mdpi、hdpi、xh xxh xxxh等等,间接导致资源增多。 3.引入的第三方sdk或开…

Linux进程空间地址

程序地址空间回顾 问题引入 ---------------明天再写0.0

Linux提取RPM包文件

在讲解如何从 RPM 包中提取文件之前,先来系统学习一下 cpio 命令。cpio 命令用于从归档包中存入和读取文件,换句话说,cpio 命令可以从归档包中提取文件(或目录),也可以将文件(或目录&#xff09…

【Go入门】面向对象

【Go入门】面向对象 前面两章我们介绍了函数和struct,那你是否想过函数当作struct的字段一样来处理呢?今天我们就讲解一下函数的另一种形态,带有接收者的函数,我们称为method method 现在假设有这么一个场景,你定义…

Qt贝塞尔曲线

目录 引言核心代码基本表达绘制曲线使用QEasingCurve 完整代码 引言 贝塞尔曲线客户端开发中常见的过渡效果,如界面的淡入淡出、数值变化、颜色变化等等。为了能够更深的了解地理解贝塞尔曲线,本文通过Demo将贝塞尔曲线绘制出来,如下所示&am…

SPC 的一些小知识

在生产管理系统种,经常回涉及到质量管理分,我们经常听说SPC、SPC控制图等和SPC相关的词汇,那么SPC是什么意思呢?它有什么作用呢?在这里通俗一点介绍一下SPC。 SPC是统计过程控制(Statistical Process Cont…

xsschallenge通关攻略详解

xsschallenge通过攻略 文章目录 xsschallenge通过攻略第一关第二关第三关第四关第五关第六关第七关第八关第九关第十关第十一关第十二关第十三关 简述 xsschallenge挑战攻略 ps: 终极测试代码 <sCr<ScRiPt>IPT>OonN"\/(hrHRefEF)</sCr</ScRiPt>IPT&g…

系列八、Mybatis一对多查询,只查询出了一条记录

一、Mybatis一对多查询&#xff0c;只查询出了一条记录 1.1、问题说明 典型的权限管理框架的数据库表中&#xff0c;一般会存在这样3种角色的表&#xff0c;即用户表、角色表、用户角色关联表&#xff0c;表设计好之后&#xff0c;往这三张表中初始化了一些测试数据&#xff0…