当前位置: 首页 > 科技观察

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

时间:2023-03-19 19:02:28 科技观察

测试开发同学必须了解的Java11重要变化主要是Java8。因为系统正在建设中,所以忌讳擅自更改语言SDK版本。因为改变语言SDK意味着SDKAPI有改变的风险,极有可能导致很多未知的运行时错误和编译错误。一个大型的软件系统其实不仅仅包括语言SDK,还有很多框架和中间件,比如SpringCloud全家桶、Kafka、Spark等,升级SDK意味着要面对大量的SDK升级。中间组件不向后兼容的可能性,一旦遇到,对整个软件系统来说都是一场灾难。对于测试开发工程师来说,升级到jdk11的风险要小很多,因为我们的代码量和依赖的框架、中间件相对开发人员要小很多!我个人建议测试开发者可以选择使用jdk11。这里总结一下jdk11在使用上的一些重要变化!总体感觉:jdk11的语法越来越像python了!变量类型推断引入了关键字var,用var定义的变量不需要写具体类型。编译器可以根据=右边的实际值赋值自动推断出变量的类型:varstr="hellojdk11";System.out.println(str);输出的hellojdk11是错觉吗,我是谁?我在哪里?我在用蟒蛇吗?Files类文件读写增强可以通过Files类的静态方法writeString()和readString()完成文件读写操作。核心示例代码如下:Pathpath=Paths.get("D:/test.txt");Stringcontent=null;try{content=Files.readString(path,StandardCharsets.UTF_8);}catch(IOExceptione){e.printStackTrace();}System.out.println(content);try{Files.writeString(path,"老李",StandardCharsets.UTF_8);}catch(IOExceptione){e.printStackTrace();}现在官方提供了HTTPClientJDK官方自带HTTPClient,位于java.net.http包下。很明显,就是标准的apache的httpclient。我们直接使用jdk11自带的httpclient就可以做接口测试相关的工作了!核心示例代码如下:varrequest=HttpRequest.newBuilder().uri(URI.create("https://www.baidu.com")).GET().build();HttpResponsehttpResponse=空;试试{httpResponse=HttpClient.newHttpClient().send(request,HttpResponse.BodyHandlers.ofString());}catch(IOExceptione){e.printStackTrace();}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(httpResponse.body());//打印获取的网页内容,支持直接运行java源文件。在cmd中执行命令java**.java,直接运行**.java文件。是不是又出现了错觉,我是谁?我在哪里?我在用蟒蛇吗?Jshell交互工具的使用从java9开始,java开始引入类似python的交互工具。jdkbin目录下提供了工具Jshell。使用方法如下幻觉,我是谁?我在哪里?我在用蟒蛇吗?下面两个功能是性能测试工程师绝对需要了解的:垃圾回收机制ZGC的性能提升,这应该是JDK11最吸引眼球的特性了,不是其中之一而是紧随其后的是Experimental,说明是不建议在生产环境中使用。ZGC的设计目标是:支持TB级内存容量,低停顿时间(<10ms),对整个程序吞吐量的影响小于15%。全面支持Linux容器(包括Docker)许多运行在Java虚拟机中的应用程序都可以运行在Docker容器中。但是在Docker容器中运行Java应用一直存在一个问题,那就是在设置了运行在容器中的JVM程序的内存大小和CPU使用率后,应用的性能会有所下降。这是因为Java应用程序不知道它正在容器中运行。随着Java10的发布,这个问题终于得到解决,JVM现在可以识别容器控制组(cgroups)设置的约束。容器中可以使用内存和CPU约束来直接管理Java应用,包括:尊重容器中设置的内存限制设置容器中可用的CPU设置容器中的CPU约束升级到jdk11的问题——软件不兼容Maximum问题是jdk11不兼容与其他软件。比如jmeter4.0在jdk11环境下运行会失败。所以建议电脑同时安装jdk1.8和jdk11!