导读:AJDK11(阿里内部基于openJDK11的定制版本)在19年3月左右发布,到现在也快1年了,不过目前整体使用的面还是比较窄,特性被了解的也不是很多,Java11作为OpenJDK发布的LTS版本,对我们来说,还是需要去拥抱和熟悉的,所以从目前的Java8升级到Java11,是一件不紧急但是重要的事情。

作者 | 江丹阳(Mario)

责编 | 屠敏

头图 | CSDN 下载自视觉中国

来源 | 淘系技术(ID:AlibabaMTT)

一说升级

▐  运行环境升级

环境升级,主要是alios7(内部Linux 7u2的定制版) + ajdk11(当前比较稳定的版本是ajdk-11_0_4_5-b71),这个升级通过修改应用APP-META目录中的dockerfile可以完成;

▐  构建插件升级

构建插件的升级主要是maven compile插件的升级,需要升级到3.8.0版本,pandora-boot的maven插件升级到2.1.11.9,依赖如下:

同时将编译的目标文件和源文件的编译版本指定下:

▐  框架升级

主要是springboot和pandoraboot的升级,同时还有pandora sar包的升级:

▐  依赖升级

在Java11中移除了一些模块,所以在做升级的时候,需要看需求手动进行依赖,主要有如下几个:

▐  运行脚本升级

这里的脚本升级主要是一些jvm的启动参数兼容问题,比如debug option,还有gc日志打印相关的option,主要修改appctl.sh和setenv.sh两个脚本。

比如java9以前的GC日志打印是:

-Xloggc:${MIDDLEWARE_LOGS}/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"

Java9以后就是:

-Xlog:gc*:${MIDDLEWARE_LOGS}/gc.log:time"

release文件更新:

主要是指定新的ajdk的版本,以及maven的版本(3.5.0及以上)。

二诉“债务”

之前有和一些升级过的同学沟通过,这个Java11的升级还是比较平滑、顺利,没有太多成本,但是这次走起来其实还是克服了不少困难,不是本身Java11升级的问题,而是历史的债务在Java11升级的过程中都暴露了出来。

▐  Linux版本

Linux 版本 7u2 出来已经5年多了,目前集团所有的线上和线下的宿主机的系统都是alios7,所以很难想象现有的系统在docker里面依赖的是5u7的linux基础镜像,这里面会有一个比较严重的性能问题:

因为7u2的glibc去掉了vsyscall改成vdso,5u7的glibc还是保留vsyscall,就需要有一个内核接口来模拟,这个模拟是有严重性能问题的,sys%会非常高。

所以没有升级的赶紧升级下吧,使用裁剪版本(alios7u2-min),体积可以从原来的5u7 2G多到500M多,这个大小的优化能提升的东西不做赘述。

▐  本地启动

本地启动,好多开发同学可能都没有用过,所以起不来也不是一件很难想象的事情,那问一个问题:为什么做pandoraboot升级?为什么做boot化?boot化带来了哪些价值?给我们带来了哪些改变?我觉得这些问题在最开始推微服务的时候,大家都是很关注的,但是当后面微服务成为趋势,pandoraboot或springboot成为微服务框架之后,之前的问题就没人关注了。

应用owner还是看看自己的boot化应用是否能启动吧,本地启动、本地调试可以节省的开发调试时间谁用谁知道吧。

▐  autoconfig

老生常谈的问题,这个属于时代产物了,在架构演进过程中一直被容忍,一直被小心呵护兼容,因为动之成本有点高,协同比较大,说白了就是很难~~~

有理想追求的程序员大家可以聚一起看看怎么落地~~

三叙“危机”

▐  “危”

面试的标准个人看来是越来越高,但是里面的人做事的标准是越来越低,“调包侠”、“拿来主义”、“翻译器”、“施工队”现象也是越来越常见,我只想说,我们是程序员,借用之前比较孤傲的定位,我们是“艺术家”,那什么时候落魄成了我们当初斥责的模样;从现在起,建立危机意识吧。

▐  “机”

事情是升级Java11,获益是Java9到java11的所有的增强和新特性,下面是个人看到的一些利益点,欢迎大家补充。

内存优化

Java9中增强了string的底层存储,LATIN1编码的字符串底层存储从原来的char数组变成了byte数据,对于这样指定的字符串的内存使用节省一半,整体内存的节省大概10%(不同应用可能差别比较大)。

▐  HotSpot增强

Java9中引入了HotSpotIntrinsicCandidate这个注释,主要是在使用CPU及OS层面的native方法替换java function,达到性能提升,效果会因为平台和硬件不同有差异,目前主要是在一些基础类的一些高频方法中出现该注解。

▐  GC提升

我们目前使用的是CMS垃圾回收器,相当好,我们也用了很长一段时间了,不过CMS随着发展,也暴露出两个问题,一个是面向大内存的回收效率会下降比较明显,同时回收的时长不可控;在后续的Java9中的G1和Java11中ZGC相继出现,就是针对上述两个方向进行的优化。

升级了Java11,其实不一定要用ZGC,因为目前我们大部分应用的配置是4c8g,有人做过性能测试,在8G以下,CMS的回收性能会比ZGC还好一点,8G的情况下差不多,那么8G以上,ZGC会的性能会比较好,同时他的回收效率受内存大小的持续上升影响较小;目前我们有些核心应用的配置是8c16G的,所以这块GC的增强还是有收益的。

FaaS化

FaaS最近一段时间都是一个蛮热的话题,不过距离整体在现有业务场景中广泛应用,还有一段时间;那升级Java11和FaaS化有什么关联呢?

个人感觉是两个方面:

  1. 模块化;

  2. graalVM。

FaaS要支持在线业务的核心关键在于Function的快速分发、运行环境快速拉起来达到低延迟反馈,所以模块化可以让应用足够小,graalVM可以提前将非动态Java代码编译成native image,提升启动速度同时减少整体App的大小;

趋势

从Java 11开始,OpenJDK major version的发布间隔差不多是半年,不用全部都要去关注,都是追赶,但是LTS版本,需要去追赶,去升级,Java11就是最新的LTS版本,下一个或者再一下major version,很可能又是一个LTS版本;虽然目前使用Java 8都挺好的,现实是Java 8的一些特性会被往后移植,但是后续版本的特性和优化不会再被集成到Java 8中了,势不可逆,跟不上就快要被淘汰了。

结语

Java 11的升级带来的收益还是可圈可点的,整体过程也还顺滑,没有兼容性问题,感兴趣的同学可以尝试升级,并且关注一些指标变化。

【End】

在全民抗疫的特殊时期下,在人员复杂、流动量大地方的出入口处都设置了无接触式无感红外人体测温系统

在这次疫情防控中,无感人体测温系统发挥了怎样的作用?高精准的无感人体测温系统的核心技术武器是什么?对于开发者们来说,大家应该了解哪些技术

今晚7点多场景疫情防控:解读云边端联动下的全栈 AI 技术应用

推荐阅读 

☞微信回应钉钉健康码无法访问;谷歌取消年度 I/O 开发者大会;微软公布 Visual Studio 最新路线图 | 极客头条

☞这项标准,支付宝干成了!中国将有更多主导权!

☞6个步骤,告诉你如何用树莓派和机器学习DIY一个车牌识别器!(附详细分析)

☞血亏 1.5 亿元!微盟耗时 145 个小时弥补删库

☞什么是 CD 管道?一文告诉你如何借助Kubernetes、Ansible和Jenkins创建CD管道!

☞智能合约初探:概念与演变

你点的每一个在看,我认真当成了喜欢

Java 11 升级:“债务”“危机”相关推荐

  1. java 平滑升级_Java 11 升级:“债务”“危机”

    导读:AJDK11(阿里内部基于openJDK11的定制版本)在19年3月左右发布,到现在也快1年了,不过目前整体使用的面还是比较窄,特性被了解的也不是很多,Java11作为OpenJDK发布的LTS ...

  2. 升级glibc的影响_Java 11 升级:“债务”“危机”

    导读:AJDK11(阿里内部基于openJDK11的定制版本)在19年3月左右发布,到现在也快1年了,不过目前整体使用的面还是比较窄,特性被了解的也不是很多,Java11作为OpenJDK发布的LTS ...

  3. 什么?超过60%的开发者都开始从Java 8 升级到 Java 11了?

    随着Java版本命名规则的改革,我们时不时的见到Java又出新版本的消息,DD这边因为长期从事Java方向的开发,所以也一直关注并与大家分享这方面的咨询. 每次说到Java升级,几乎在留言中都会看到这 ...

  4. java 8 update 11_从Java 8升级到Java 11应该注意的问题

    从 Java 8迁移到Java 11比大多数升级更棘手.以下是这个过程的一些注意事项. 模块 在Java 9中Java引入了历史上最大的变化之一 是模块,但: 不必将你自己的代码模块化以后才能升级到J ...

  5. 本周推荐 | JDK 11 升级实践 和 Java 新特性浅探

    推荐语:学习java和jdk的新特性并积极应用,以达到优化系统,降本提效的作用,这是我们作为java研发同学的第一节课.本文从"为什么"起手,谈到"怎么做",最 ...

  6. Java 8(JDK 1.8)升级更新至 Java 11(JDK 11)/ Java 17(JDK 17)LTS

    Java 8 可谓是Java的一个经典版本,虽然距离2014年3月发布已经过去了7年多了,但是相信不少人依旧还在使用.可是几个月后的2022年3月,Java8将失去 Oracle 的 Premier ...

  7. Java 11 正式发布!

    有多少语言在提刀想反超 Java 的路上?但万万没想到,人家并未当回事,如今这款常青藤甚至越跑越欢,当我们还在使用 Java 7/8 时,它已经一路跑到了 11. 和预期的时间差不多,北京时间 9 月 ...

  8. Java 8 失宠!开发人员向 Java 11 转移...

    以下文章来源方志朋的博客,回复"666"获面试宝典 作者:白开水 来源:OSC开源社区(ID:oschina2013) 此前的 Java 社区报告曾指出,Java 8 仍是开发人员 ...

  9. 4.6 W 字总结!Java 11—Java 17特性详解

    作者 | 民工哥技术之路 来源 | https://mp.weixin.qq.com/s/SVleHYFQeePNT7q67UoL4Q Java 11 特性详解 基于嵌套的访问控制 与 Java 语言 ...

最新文章

  1. arduino 呼吸灯_如何改善您的Arduino呼吸机:用于临时COVID-19呼吸机设计的RTS和SCS简介...
  2. Linux0.11 中对地址的管理
  3. python写if_用python编写if-else的更优雅的方法
  4. 图形基础 GPU架构(5)并行计算
  5. nodejs在服务器上运行
  6. P6800-[模板]Chirp Z-Transform【NTT】
  7. php向下滑动,js如何判断鼠标滚轮是向下还是向上滚动
  8. Java IDEA使用详解
  9. 【人工智能】“看透”神经网络
  10. Python自定义类调用方法
  11. 从问题到解决方案到应用-android-ApiDemo入口源代码学习及应用
  12. 三等分任意角可能吗?
  13. 一年级下册计算机教学计划,一年级下册教学计划
  14. R语言绘制bivariate polar plots
  15. Java并发编程(一)——并发的基本概念
  16. KMIP协议/TTLV格式解码
  17. mysql常用增删改查命令总结
  18. 从手动测试,到自动化测试老司机,只用了几个月,我的薪资翻了一倍
  19. 关于Trunk封装的协议和模式。如何配置trunk
  20. 《指数基金投资指南》读书笔记---指数基金的分类

热门文章

  1. Linux-系统负载
  2. 如何使用 淘宝 NPM 镜像
  3. OC正则表达式的使用
  4. DML 触发器 Set选项
  5. 【mybatis】一对一关联查询
  6. 如何在矩池云GPU云中安装MATLAB R2017b软件
  7. linux内核初始化卡死,armlinux内核启动--内存初始化管理
  8. 苹果sf字体_原来苹果偷偷爱了这些字体
  9. 数据结构与算法——递归、回溯与分治汇总整理
  10. 从起始点到目标点的最短步数(BFS)