JDK11 新特性

本贴最后更新于 1978 天前,其中的信息可能已经时异事殊

1、新增 HttpClient 客户端

简介

这个功能在 JDK9 中引入并在 JDK10 中得到了更新,最终在 JDK11 中发布,支持 HTTP1.1
和 HTTP/2。
常用工具类和接口:

  • HttpClient.Builder HttpClient 构建 ⼯具类
  • HttpRequest.Builder HttpRequest 构建 ⼯具类
  • HttpRequest.BodyPublisher 将 Java 对象转换为可发送的 HTTP request body 字节流, 如 form 表单提交
  • HttpResponse.BodyHandler 处理接收到的 Response Body

Get 请求

package jdk11; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.time.Duration; /** * @author by xw * @Description TODO */ public class HttpClientTest { private static final URI uri = URI.create("http://www.baidu.com"); public static void main(String[] args) { testGet(); } //GET请求 private static void testGet() { //var httpClient = HttpClient.newHttpClient(); //设置建⽴连接超时 connect timeout var httpClient = HttpClient.newBuilder().connectTimeout(Duration.ofMillis(5000)).build(); //设置读取数据超时 read timeout var request = HttpRequest.newBuilder().timeout(Duration.ofMillis(3000)) .header("key1", "v1") .header("key2", "v2") .uri(uri).build(); System.out.println(request); try { var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); } catch (Exception e) { e.printStackTrace(); } } }

POST 请求

private static void testPost() { var httpClient = HttpClient.newHttpClient(); var request = HttpRequest.newBuilder() .uri(uri) .header("Content-Type", "application/x-www-formurlencoded") .POST(HttpRequest.BodyPublishers.ofString("account=123456&pwd=1234567890")) .build(); try { var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); } catch (Exception e) { e.printStackTrace(); } }

异步 Get 请求

/** * 异步请求 */ private static void testAsynGet() { var httpClient = HttpClient.newBuilder().build(); var request = HttpRequest.newBuilder().timeout(Duration.ofMillis(3000)) .header("key1", "v1") .header("key2", "v2") .uri(uri).build(); try { CompletableFuture<String> result = httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body); System.out.println(result.get()); } catch (Exception e) { e.printStackTrace(); } }

HTTP2 请求
Http2 百度百科:
HTTP2 协议的强制要求 https,如果 ⽬标 URI 是 HTTP 的,则 ⽆法使 ⽤ HTTP 2 协议。

private static void testHttp2() { var httpClient = HttpClient.newBuilder() .connectTimeout(Duration.ofMillis(3000)) //指定版本 .version(HttpClient.Version.HTTP_2) .build(); var request = HttpRequest.newBuilder() .timeout(Duration.ofMillis(3000)) .header("key1", "v1") .header("key2", "v2") .uri(uri1) .build(); try { var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); System.out.println(response.version()); } catch (Exception e) { e.printStackTrace(); } }

2、javac 和 Java 命令优化

我们在 jdk11 以前运行 Java 程序,命令如下

#编译 javac xxx.java #运行 java xxx

jdk11 以后运行 Java 程序,命令如下

# 本地不会产生class文件 java xxx.java

3、ZGC(可伸缩的低延迟垃圾回收器)-实验阶段

ZGC,是一个可伸缩的低延迟垃圾收集器。 它旨在实现以下目标:

  • 暂停时间不要超过 10 毫秒
  • 暂停时间不会随堆大小的增加而增加,能够在很大的堆内存中进行高效垃圾回收。

Zgc 的核心是一个并发垃圾收集器,这意味着所有繁重的提升工作(标记、压缩、引用处理、字符串表清理等)都是在 Java 线程继续执行时完成的。 这大大限制了垃圾收集对应用程序响应时间的影响。

4、Epsilon GC

Epsilon GC 是一种新的实验性无运行垃圾收集器。 Epsilon GC 只处理内存分配,不实现任何内存回收机制。 它对于性能测试非常有用,可以对比其他 gc 的成本及效率。 它可以用来在测试中方便地确定内存占用和内存压力。

5、移除方法

方法 Thread.destroy ()和 Thread.stop (Throwable)已被删除。

参考文档:
官网文档
项目代码地址

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3201 引用 • 8216 回帖 • 2 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...