本篇内容介绍了“JDK16有哪些新特性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
jenv add ${JDK16_Path}jenv global openjdk64-16
java -versionopenjdk version "16"2021-03-16OpenJDK Runtime Environment (build 16+36-2231)OpenJDK 64-Bit Server VM (build 16+36-2231, mixed mode, sharing)
Cannot determine path to 'tools.jar' library for 16 (path/to/jdk-16) when running from IDEA, you should update to the latest version.
版本控制元数据大小方面,转换后的存储库的初始原型已显示出版本控制元数据的大小显着减少。例如,使用Git的jdk仓库的.git目录大约为300MB,而使用Mercurial的.hg目录大约为1.2GB。减少元数据可保留本地磁盘空间并减少克隆时间,同时减少传输的数据。
可用工具方面,与Mercurial相比,Git可用的工具更多。所有的文本编辑器都可以本地或通过插件实现Git集成。此外,几乎所有的IDE都带有Git集成,包括Eclipse、Visual Studio、IDEA。
可用托管方面,有许多选项可用于托管Git仓库,无论是自托管还是作为服务托管。使用外部源码托管提供程序的原因包括性能、与开发人员进行交互的Web API的访问权限控制 以及 蓬勃发展的社区。
通过fork一份JDK 16源码仓库,可以一边阅读源代码,一边做笔记并提交,方便持续学习JDK源码。使用Git的upsteam保持JDK源码的更新,同时也保持自我更新。
如网速够快,通过Github在线阅读代码的工具Github1s,快速在浏览器中翻阅JDK 16源码也是非常方便。
更小的镜像体积分发时会更加迅速
应用程序/容器的启动要迅速
# 获取Alpine Linux镜像docker pull alpine# 运行镜像docker run alpine echo'Hello Alpine!'
REPOSITORY TAG IMAGE ID CREATED SIZEalpine latest 7731472c3f2a 7 weeks ago 5.61MB
FROM openjdk:16-jdk-alpineVOLUME /tmpARG JAR_FILEADD ${JAR_FILE} app.jarENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
# 构建镜像,设置JAR_FILE参数指向Spring Boot程序Jar包路径docker build --build-argJAR_FILE=target/rest-service-0.0.1-SNAPSHOT.jar -t alpine-jdk16-app:latest . # 查看镜像docker images # 根据镜像,启动容器运行# -d参数 后台运行# -p参数 Spring Boot默认端口8080,映射到容器端口8080docker run -d-p8080:8080 alpine-jdk16-app:latest # 查看容器运行docker ps # 验证成功之后可以停止容器docker stop${CONTAINER_ID} # 访问应用curl-w'\n' http://127.0.0.1:8080/greeting?name=jdk16
隐式声明了属性
隐式声明了构造器
隐式声明了equals()、hashCode()、toString()
隐式声明了属性的访问器,访问器名称与属性同名
public record Point(int x, int y) {}
List<Merchant>findTopMerchants(List<Merchant> merchants, int month) { // Local record record MerchantSales(Merchant merchant, double sales) {} // 使用MerchantSales Record类临时包装merchant和sales,方便做处理。 return merchants.stream() .map(merchant ->new MerchantSales(merchant, computeSales(merchant, month))) .sorted((m1, m2) ->Double.compare(m2.sales(), m1.sales())) .map(MerchantSales::merchant) .collect(toList());}
if (obj instanceofString) { String s = (String) obj; ...}
if (obj instanceofString s) { // 通过使用模式匹配可以直接使用s局部变量 ...}
publicbooleanequals(Object o) { if (!(o instanceof Point)) returnfalse; Point other = (Point) o; return x == other.x && y == other.y;}
publicbooleanequals(Object o) { return (o instanceof Point other) && x == other.x && y == other.y;}
if (a instanceof Point p) { // p is in scope ...} else { // p not in scope here} // p not in scope here if (b instanceof Point p) { // Sure! ...}
if (x instanceofInteger num) { ... }elseif (x instanceofLong num) { ... }elseif (x instanceofDouble num) { ... }
“JDK16有哪些新特性”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。