Java13新增特性

2.5 添加了-XXSoftMaxHeapSize标志

2.6 ZGC支持的最大堆变化

2.7 动态CDS归档

2.8 CRL的可配置读取超时

2.9 新增TLS配置信息命令

2.10 支持下一代MS密码学(CNG)

2.11 SunPKCS11提供升级与PKCS#11 V2.40支持

三、删除功能

3.1 删除awt.toolkit系统属性

3.2 删除运行时跟踪方法

3.3 不再支持JDK 1.4之前的SocketImpl实现

3.4 删除VM选项-XX + AggressiveOpts

3.5 重复的RSA服务不再受SunJSSE提供支持

3.6 证书删除

3.7 删除com.sun.net.ssl软件包

3.8 FIPS 140兼容模式去除

四、不推荐使用的功能和选项

4.1 StringBuilder和StringBuffer参数为负引发的异常

4.2 Linux上的默认进程启动机制

4.3 jli包限定使用方法句柄对于静态常量字段的设值权限

4.4 SocketImpl一些默认实现的变更.

4.5 NewDirectByteBuffer 开辟的直接内存将固定为大字节序.

4.6 Files.isHidden 在windows中使用隐藏目录时返回true.

4.7 Base64.Encoder和Base64.Decoder方法可以抛出的OutOfMemoryError

4.8 对于压缩文件(zip或jar)的api进行内容更新时的注意事项

4.9 对于x86_64无压缩引用的场景,将有更多可用寄存器资源.

4.10 提升稀疏prt条目工效.

4.11 jrt协议只能编码jrt:/modules树下的路径.

五、总结


一、小插曲

=====

今天闲来无事,准备熟悉下JAVA13的新特性,就下载了jdk13版本。然后换了JDK,执行java -version 命令查看是否成功!结果执行命令报错了!在想是不是哪里出了问题。

然后去看了下安装目录看了下,见下图。发现…emmmmm…这好像和我认识的jdk不太一样啊。

我有看了下java8的目录结构

 

目录结构为毛变了???jre呢!!!翻阅了资料,原来是因为在jdk9之后,安装jdk默认就不带jre了。原谅我一直在用java8.。。居然没有注意到这个点。如果需要jre的话。可以通过命令的方式进行生成。

首先以管理员的身份打开命令行,不然会没有权限。进入,jdk安装路径,我的是C:\Program Files\Java\jdk-13。执行

bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre 命令。即可生成对应的jre目录。

查看版本号。输出java13.

不过之前报错不是因为没有jre。因为我路径搞错了。。。。

二、新功能和增强功能

==========

结束了小插曲,我们进入正题。

现在统计数据来看,绝大部分企业还是Java 8,不会冒险升级,作为企业应用开发,Java8也足够了。

另外企业不用担心Oracle 版本的JDK收费问题。只要我们使用Open JDK代替Oracle JDK就可以

官网更新文档见https://www.oracle.com/technetwork/java/javase/13-relnote-issues-5460548.html

2.1、新增语法糖(预览版)


2.1.1Text Blocks

不得不说,我觉得这次新增语法块是真的好用。字符串可以像markDown一样的语法去写。

以前写法

String html = “\n” +

" \n" +

"

Hello, java

\n" +

" \n" +

“\n”;

现在写法

String html = “”"

Hello, java

“”";

String query = “”"

SELECT EMP_ID, LAST_NAME FROM EMPLOYEE_TB

WHERE CITY = ‘INDIANAPOLIS’

ORDER BY EMP_ID, LAST_NAME;

“”";

使用该表达式的字符串对象兼容老的表达方式,如两者混合使用,进行相加等操作,调用字符串String的方法等.

String code = String.format(“”"

public void print(%s o) {

System.out.println(Objects.toString(o));

}

“”", type);

Stirng新增的有关方法:

String::stripIndent(): 从文本块语法的表达中去除空格.

String::translateEscapes(): 转义退出字符序列.

String::formatted(Object… args): 进行文本块中某些值的格式化.

终于可以不用各种+,各种append了。但是应该会有各种问题,该功能还属于预览版。

2.1.2 Switch Expressions

对Switch表达式进行了优化

以前写法

int i;

switch (x) {

case “1”:

i=1;

break;

case “2”:

i=2;

break;

default:

i = x.length();

break;

}

现在支持

String formatted =

switch (obj) {

case Integer i -> String.format(“int %d”, i)

case Byte b -> String.format(“byte %d”, b);

case Long l -> String.format(“long %d”, l);

case Double d -> String.format(“double %f”, d);

case String s -> String.format(“String %s”, s);

default -> obj.toString();

};

int eval(Node n) {

switch(n) {

case IntNode(int i): return i;

case NegNode(Node n): return -eval(n);

case AddNode(Node left, Node right): return eval(left) + eval(right);

case MulNode(Node left, Node right): return eval(left) * eval(right);

default: throw new IllegalStateException(n);

};

}

2.2 新的api


2.2.1 java.nio.file.FileSystems

添加了FileSystems.newFileSystem(Path,Map <String,?>)方法

添加了三种新方法,java.nio.file.FileSystems以使使用文件系统提供程序的文件系统提供程序更容易使用。

newFileSystem(Path)

newFileSystem(Path, Map<String, ?>)

newFileSystem(Path, Map<String, ?>, ClassLoader)

2.2.2 java.nio.ByteBuffer

java.nio.ByteBuffer 新增若干对于buffer的批量的数据get/put,而且不影响buffer位.

java.nio.ByteBuffer``java.nio现在,其他缓冲区类型定义了绝对批量getput方法来传输连续的字节序列,而不考虑或影响缓冲区位置。

2.2.3 dom sax

dom sax解析有关的新api

官方的说法是为初始化dom sax工厂时提供了创建带有默认命名空间的api,特点是方法名上带有NS,三个方法分别是:

newDefaultNSInstance()

newNSInstance()

newNSInstance(String factoryClassName, ClassLoader classLoader)

相应的,使用jdk13,这段代码:

DocumentBuilder db = DocumentBuilderFactory.newDefaultNSInstance().newDocumentBuilder();

等效于:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newDefaultInstance();

dbf.setNamespaceAware(true);

DocumentBuilder db = dbf.newDocumentBuilder();

2.3 unicode12.1 支持


最近每个版本都会扩大字符集支持.

2.4  ZGC取消提交未使用的存储器


ZGC已得到增强,可以将未使用的堆内存返回给操作系统。这对于关注内存占用的应用程序和环境很有用。

默认情况下启用此功能,但可以使用明确禁用此功能-XX:-ZUncommit。此外,不会取消分配内存,以使堆大小缩小到最小堆大小(-Xms)以下。这意味着,如果最小堆大小(-Xms)配置为等于最大堆大小(-Xmx),则将隐式禁用此功能。

可以使用以下命令配置未提交的延迟-XX:ZUncommitDelay=<seconds>(默认为300秒)。此延迟指定在可以取消提交之前应使用多长时间的内存。

注:简单介绍下ZGC,可能我们目前在使用的是CMS垃圾回收器或者是G1垃圾回收器或者什么没有设置使用的是jdk默认的垃圾回收器。

ZGC回收机在jdk11支持,ZGC目前仅适用于Linux / x64 。和G1开启很像,用下面参数即可开启:

-XX:+UnlockExperimentalVMOptions -XX:+UseZGC

ZGC垃圾收集器,也称为ZGC,是一个可扩展的低延迟垃圾收集器,有如下特性:

  • 暂停时间不超过10毫秒

  • 暂停时间不会随堆或实时设置大小而增加

  • 处理堆范围从几百M到几TB。

ZGC的成绩是,无论你开了多大的堆内存(1288G? 2T?),硬是能保证低于10毫秒的JVM停顿,远胜前代的G1。

2.5 添加了-XXSoftMaxHeapSize标志


可管理的命令行标志-XX:SoftMaxHeapSize=<bytes>已添加。当前,它仅在启用Z垃圾收集器(-XX:+UseZGC)时有效。

设置后,GC将努力不使堆增长超出指定的大小,除非GC决定有必要这样做,以避免OutOfMemoryError。不允许将最大软堆大小设置为大于最大堆大小(-Xmx)的值。如果未在命令行上设置,则默认为等于最大堆大小的值。

这个值可以在运行时调整其值。例如,可以通过使用jcmd VM.set_flag SoftMaxHeapSize <bytes>或通过HotSpot MXBean 来调整其值。

在一些特定的场景下我们需要这个新的特性,如非常在意资源使用,希望保持低堆内存占用,但同时又想同时能应付临时的,偶发的内存空间突增,尤其是在并发场景下无法预知的对象分配速率的突增.设置软最大堆内存将鼓励gc维护一个小堆,这样gc会更积极的进行垃圾回收,对于应用程序突发地增加对象分配速度也能更加从容应对.

2.6 ZGC支持的最大堆变化


ZGC支持的最大堆大小从4TB增加到16TB。

2.7 动态CDS归档


CDS的功能在进化一步,就是动态CDS功能。说白了,可以在运行期间动态保存类数据,也就是所谓的归档。

应用程序class-data Sharing(AppCDS)在JDK13新版本里已经简化。在应用程序退出时,可以动态存档类数据。动态生成的归档文件将在与正在运行的JDK映像一起打包的默认系统归档文件上创建生成,并保存数据。

#创建存档文件

% bin/java -XX:ArchiveClassesAtExit=helloworld.jsa -cp helloworld.jar Hello

使用存档文件

% bin/java -XX:SharedArchiveFile=hello.jsa -cp helloworld.jar Hello

使用动态存档,在老文档基础上

% bin/java -XX:SharedArchiveFile=:helloworld.jsa -cp helloworld.jar Hello

2.8 CRL的可配置读取超时


com.sun.security.crl.readtimeout系统属性设置为CRL检索的最大读取超时,单位为秒。如果尚未设置该属性,或者该属性的值为负,则将其设置为默认值15秒。值为0表示无限超时。

2.9 新增TLS配置信息命令


keytool -showinfo -tls添加了显示TLS配置信息的新命令。

2.10 支持下一代MS密码学(CNG)


SunMSCAPI提供程序现在支持读取下一代加密(CNG)格式的私钥。这意味着可以从Windows密钥库(例如“ Windows-MY”)中加载CNG格式的RSA和EC密钥。与EC(签名算法SHA1withECDSASHA256withECDSA等等)也支持。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

独家面经总结,超级精彩

本人面试腾讯,阿里,百度等企业总结下来的面试经历,都是真实的,分享给大家!

image

image

image

image

Java面试准备

准确的说这里又分为两部分:

  1. Java刷题
  2. 算法刷题

Java刷题:此份文档详细记录了千道面试题与详解;

image

image

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

独家面经总结,超级精彩

本人面试腾讯,阿里,百度等企业总结下来的面试经历,都是真实的,分享给大家!

[外链图片转存中…(img-qpTwRd6W-1713116600147)]

[外链图片转存中…(img-HdPzPCFh-1713116600148)]

[外链图片转存中…(img-mzlydOEB-1713116600148)]

[外链图片转存中…(img-wKYYNpnx-1713116600148)]

Java面试准备

准确的说这里又分为两部分:

  1. Java刷题
  2. 算法刷题

Java刷题:此份文档详细记录了千道面试题与详解;

[外链图片转存中…(img-wBB3smpK-1713116600148)]

[外链图片转存中…(img-VFQ9UVTT-1713116600148)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 8 到 Java 17 的新增特性如下: Java 8 新增特性: - Lambda 表达式 - 方法引用和构造函数引用 - 接口默认方法和静态方法 - Stream API - 新的日期/时间 API - Nashorn JavaScript 引擎 Java 9 新增特性: - 模块化系统 - JShell REPL 工具 - 私有接口方法 - 集合工厂方法 - 改进的 Stream API Java 10 新增特性: - 局部变量类型推断 - G1 垃圾收集器的并行 Full GC Java 11 新增特性: - HTTP Client API - 支持 Unicode 10.0.0 - 基于 Java 9 的模块化系统的改进 - 支持 TLS 1.3 Java 12 新增特性: - Switch 表达式 - 新的字符串方法 - 改进的 Shenandoah 垃圾收集器 Java 13 新增特性: - Text Blocks - Switch 表达式增强 - 改进的 ZGC 垃圾收集器 Java 14 新增特性: - Switch 表达式进一步增强 - instanceof 模式匹配 - Records(预览功能) - 基于 OpenJDK 的移动版 Java 15 新增特性: - Sealed 类型(预览功能) - Records - Pattern 模式匹配(预览功能) - Text Blocks 增强 - 改进的 ZGC 垃圾收集器 Java 16 新增特性: - Records - instanceof 模式匹配增强 - 改进的垃圾收集器 - Vector API(预览功能) Java 17 新增特性: - Sealed 类型 - Pattern 模式匹配 - switch 表达式增强 - 基于 OpenJDK 的移动版增强 - 预期的 ZGC 并发垃圾收集 以上是 Java 8 到 Java 17 的新增特性。值得注意的是,某些特性是通过预览功能引入的,可能在未来的版本中发生变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值