您的位置 首页 java

测试开发同学必须了解的Java11中的重要变化

测试开发同学必须了解的Java11中的重要变化

目前市场上主流的稳定版是Java 8和Java 11( java 17也推出了稳定版,但使用者寥寥),目前大部分公司的生产环境还是Java 8居多。因为正在建设中的系统,擅自更换语言SDK版本更是大忌。因为更换语言SDK就意味着SDK API面临着变更风险,极有可能导致很多未知的运行时错误和编译器错误。一个大型的软件系统,其实不仅仅光包含了语言SDK,还可能包含了诸多框架和中间件,例如Spring Cloud全家桶、 Kafka Spark 等等,升级SDK意味着你要面对大量SDK升级带来的可能对中间组件的非 向下兼容 特性,一旦遇到,那对整个软件系统那就是灭顶之灾。而对于测试开发工程师而言,升级到 JDK 11的风险要小很多,因为我们的代码量以及依赖的框架和中间件相对还是较开发人员小很多的!我个人建议测试开发人员可以选择使用jdk11,在这里总结一下使用jdk11的一些重要变化!

总体感受:jdk11的语法越来越像 python 啦!

变量类型推断

引入关键字var,用 var 来定义的变量不用写具体类型,编译器能根据=右边的实际赋值来自动推断出变量的类型:

var str= “hello jdk 11” ;
System.out.println(str);

输出

hello jdk 11

是不是有了错觉,我是谁?我在哪?我在使用python吗?

Files类文件读写增强

可以通过Files类的 静态方法 writeString()和readString()完成文件读写操作,核心示例代码如下:

 Path path = Paths.get("D: /test.txt");
String content = null;
try {
    content = Files.readString(path, StandardCharsets.UTF_8);
} catch (IO Exception  e) {
    e.printStackTrace();
}
System.out.println(content);
try {
    Files.writeString( path, "老李", StandardCharsets.UTF_8 );
} catch (IOException e) {
    e.printStackTrace();
}  

官方提供 httpclient

现在JDK官方就自带 HTTP Client 了,位于 Java .net.http包下,很显然就是对标 apache 的httpclient,我们直接使用 jdk 11中自带的httpclient就可以做接口测试相关的工作了!核心示例代码如下:

 var  request  = HttpRequest.newBuilder()
        .uri( URI.create("#34;) )
        .GET()
        .build();

HttpResponse<String> httpResponse = null;
try {
    httpResponse = HttpClient.newHttpClient()
            .send( request, HttpResponse.BodyHandlers.ofString());
} catch (IOException e) {
    e.printStackTrace();
} catch (InterruptedException e) {
    e.printStackTrace();
}
System.out.println( httpResponse.body() ); // 打印获取到的网页内容  

支持java源文件直接运行

通过在 cmd 中,执行命令java **.java,直接运行**.java文件

是不是又有了错觉,我是谁?我在哪?我在使用python吗?

Jshell交互式工具的使用

从java9开始,java开始引入了类似于python的交互式工具

在jdk bin目录下提供了工具Jshell,使用方法如下图

测试开发同学必须了解的Java11中的重要变化

是不是再次有了错觉,我是谁?我在哪?我在使用python吗?

接下来这两个功能对于性能测试工程师来说,绝对有必要了解一下:

垃圾回收机制性能的提升

ZGC, 这应该是JDK11最为瞩目的特性, 没有之一。但是后面带了Experimental, 说明这还不建议用到生产环境。ZGC的设计目标是:支持TB级内存容量,暂停时间低(<10ms),对整个程序吞吐量的影响小于15%。

完全支持 Linux 容器(包括 Docker

许多运行在 Java虚拟机 中的应用程序都可以在 Docker容器 中运行。但是在Docker容器中运行Java应用程序一直存在一个问题,那就是在容器中运行 JVM 程序在设置内存大小和 CPU使用率 后,会导致应用程序的性能下降。这是因为Java应用程序没有意识到它正在容器中运行。随着Java 10的发布,这个问题总算得以解决,JVM现在可以识别由容器控制组(cgroups)设置的约束。可以在容器中使用内存和CPU约束来直接管理Java应用程序,其中包括:

  • 遵守容器中设置的内存限制
  • 在容器中设置可用的 CPU
  • 在容器中设置CPU约束

升级到jdk11的问题-软件不兼容

最大的问题就是jdk11跟其他软件的不兼容,例如jmeter4.0在jdk11环境中就会运行失败。因此建议在电脑上同时安装jdk1.8和jdk11!

文章来源:智云一二三科技

文章标题:测试开发同学必须了解的Java11中的重要变化

文章地址:https://www.zhihuclub.com/171318.shtml

关于作者: 智云科技

热门文章

网站地图