Java 11 是继 Java8之后的第二个 LTS 版本,于2018年9月发布,这个版本的重点是提供更好的开发体验和更强大的标准库功能,特别是在字符串处理、文件操作和 HTTP 客户端方面,增加了不少新方法。
HTTP 客户端 API
HTTP 请求是后端开发常用的能力,之前我们只能基于内置的 HttpURLConnection 自己封装,或者使用 Apache HttpClient、OkHttp 第三方库。
Java 11 将 HTTP 客户端 API正式化,新的 HTTP 客户端提供了现代化的、支持 HTTP/2 和 WebSocket 的客户端实现,让网络编程变得简单。
支持发送同步和异步请求,能够轻松获取响应结果
还支持自定义响应处理和 WebSocket 请求:
上面这些代码都不用记,现在直接把接口文档甩给 AI,让它来帮你生成请求代码就好。
String 类的新方法
Java 11 为 String 类添加了许多实用的方法,让字符串处理变得更加方便。我估计很多现在学 Java 的同学都已经区分不出来哪些是新增的方法、哪些是老方法了,反正能用就行~
基本的字符串检查和处理:
strip方法
可以去除首尾空格,与之前的trim的区别是还可以去除unicode编码的空白字符,例如:
lines() 方法,让多行字符串处理更简单:
repeat方法:字符串重复的次数
Files 类的新方法
Java 11 为文件操作新增了更便捷的方法,不需要使用 FileReader/fileWriter 这种复杂的操作了。基本的文件读写操作,一个方法搞定:
支持流式读取文件,适合文件较大的场景:
Optional 的新方法
Java 11 为 Optional 类添加了 isEmpty()方法,和之前的 isPresent 正好相反,让空值检查更直观。
lambda表达式中的变量类型推断
jdk11中允许在lambda表达式的参数中使用var修饰。用处不大,因为大多数情况写参数名就够了
函数式接口:
测试类:
基于嵌套的访问控制
Java 11 改进了嵌套类的访问控制,编译器不再需要生成合成的桥接方法来访问私有成员
这个改进主要影响字节码生成,对开发者来说是透明的,但可以减少生成的类文件数量。
动态类文件常量
Java 11 在字节码层面引入了动态常量,这是一个底层特性,主要用于优化
Lambda 表达式的性能
字符串连接操作
方法句柄的使用
对普通开发者来说这个特性是透明的,但可以提升运行时性能。
Flight Recorder
Java Flight Recorder (FR)是一个低开销的事件记录框架,在 Java 11 中开源并免费使用:
JFR 可以记录:
GC 事件
线程活动
方法调用
I/O 操作
系统信息
生成的 .jfr 文件可以用 Java Mission Control (MC) 分析。
启动单文件源代码程序
Java 11 支持直接运行单个 .java 文件,无需先编译
在以前的版本中,在命令提示下,需要先编译,生成class文件之后再运行,例如:
在Java 11中,可以这样直接运行,当然这样直接运行是不产生字节码文件的
这个特性主要用于
脚本编写
快速原型开发
教学演示
低开销堆分析
Java 11 引入了低开销的堆分析工具,可以通过 JVM 参数启用
相比传统的堆转储,这种方式:
开销更低
可以持续监控
提供更详细的分配信息
ZGC 可扩展低延迟垃圾收集器
Java 11引入了 ZGC(Z Garbage Collector)作为实验特性,这是一个可扩展的低延迟垃圾收集器:
ZGC 的特点:
超低延迟:暂停时间通常小于 10ms.
可扩展:支持几TB到16TB的堆大小
并发:大部分工作与应用线程并发执行
ZGC 适用于对延迟敏感的应用,如实时系统、高频交易等。
TLS 1.3
Java 11 支持最新的 TLS 1.3 协议,提供更好的安全性和性能
TLS 1.3 的优势:
更少的握手往返
更强的加密算法
更好的前向保密性
Unicode 10
Java 11 支持 Unicode 10.00.,新增了大量字符和表情符号
Epsilon 无操作垃圾收集器
Java 11 引入了 Epsilon GC,这是一个“无操作"的垃圾收集器
Epsilon GC 的特点
不进行垃圾回收:只分配内存,不回收
最低开销:没有 GC 暂停
测试用途:主要用于性能测试和短期运行的应用
适用场景:
性能基准测试
内存压力测试
短期运行的批处理任务