云时代的 JVM 原理与实战
康杨
京东资深架构师
3111 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 39 讲
云时代的 JVM 原理与实战
15
15
1.0x
00:00/08:58
登录|注册

开篇词|云时代来临,如何学好JVM应对未来的挑战?

讲述:康杨大小:8.23M时长:08:58
你好,我是康杨,一个热衷于技术分享的架构师,很高兴在极客时间与你相遇。
我目前在京东支付负责架构升级、数字化转型还有大促备战相关的事情,同时这些年我也一直在关注前沿技术的发展与实践。作为京东集团的认证讲师,我也常常在公司内外进行技术分享,最近几年也在全球架构师峰会、全球技术创新大会等业内技术峰会针对数字化转型、云原生、海量流量的分布式系统设计进行交流和分享。

云时代 JVM 的应变之道

近两年我在参加各种技术峰会的时候发现了一个趋势,就是几乎场场都能看到云原生相关的主题。现在不光是一线的互联网大厂,就连传统的金融机构也都在积极地转型,拥抱云原生。这次变革的背后,不是单纯的技术升级,而是数字中国的国家战略。种种迹象表明云时代已经来临
然而,云时代的来临也给 Java 带来了不小的挑战,速度、内存、部署与管理的问题逐渐变成了 Java 的负累。不过它并没有坐以待毙,而是选择积极地适应新时代,引入更多新特性来应对这些挑战。
为了应对运行速度和内存占用问题,Java 持续在 JVM 层面进行优化,比如引入 GraalVM 和 OpenJ9 等新的 JVM 实现,提高了运行速度,减少了内存占用。GC 从 CMS 到 G1 再到 ZGC 的演进,内存空间利用率显著提升。并且,Java 逐渐开始支持更多的云原生特性,比如制作更小的 Docker 镜像,支持 Kubernetes 原生应用和 Serverless 等。
而现在也正处于 Java 的历史拐点,各个公司已经完成或正在进行系统的云上迁移。虽然 JDK 8 仍然被广泛采用,但是根据 New Relic 2023 年最新的报告统计,过去一年 JDK 17 的使用量增长了 430%,JDK 7 即将退出历史舞台,而 JDK 11 已经成为了使用量最高的 LTS 版本,占比达到了 56.06%。从 Graavlm 到 ZGC、从 AOT 到 Truffle,JVM 正以史无前例的更新速度和更新幅度,以自我颠覆性的方式准备迎接新时代的挑战。
图片来自2023年Java生态系统现状报告
Java 对待挑战的态度也决定了它将随时代的车轮滚动向前。在未来很长一段时间,它都会利用自身强大的生态、完善的抽象模型、丰富的开源库和工具,帮助开发者快速开发和维护应用。而它的跨平台特性也使 Java 应用可以在多种环境下运行,包括云环境。

为什么一定要学好 JVM?

变革的号角已经吹响,这个时候我们只有紧跟 JVM 变革的脚步,才能在这个历史的变革期,先人一步,抢占先机。学习 JVM 能让我们更加深入地了解云时代 Java 技术的新特性。
不过我一路走来也清楚地知道 JVM 确实是一块难啃的硬骨头,但是我还是想以过来人的身份对你说一句,无论你处在哪个阶段,JVM 底层技术都是绕不开的一环,而且越是进行上层的架构设计与规划,就越需要对底层的技术实现与原理有更深刻的理解和认知。
因为平时不被我们关注的底层技术细节,往往会在关键时刻给我们致命的打击。比如在 JDK 1.8.0_131 之前,JVM 无法感知 Docker 的真实核数和内存大小,而是使用的宿主机核数和内存。这对于已经迁移上云的应用来说存在潜在的风险,如果你忽略这一点无疑会出大问题。
但是现在市面上还有网络上关于 Java 的资料太多了,存在严重碎片化的问题。作为一门已经发展了 28 年的语言,每半年就更新一次 JDK 的版本,越来越多的厂商投入到 JDK 的研发之中,永远都有读不完技术文章,我们似乎掉入到一场碎片化的浪潮中被裹挟前行。
可能你对每个具体的知识点都能如数家珍,但是对于知识点之间的关联以及在真实的生产环境中如何应用,却很难说清。但只有做到知其然并知其所以然,形成对知识的整体认知,才能真正把对技术的理解应用于实践,去解决真实生产中的问题
这也是我打造这门课程的初心。我希望这门课程不仅仅能为你深入解读 JVM 的各个知识点 ,还能帮你揭开这些知识点背后的潜在关联,建立自己的知识框架,把对 JVM 的理解应用到具体的实践中,更能看到 JVM 演进的趋势,提前掌握新的技能,做时代的先行者。

这门课是怎么设计的?

根据我十几年的 Java 实战经验,我总结出了使用 JVM 的三层境界。
第一层境界,了解 JVM 的知识点,根据 JVM 提供的基础能力使用 JVM。
第二层境界,深度掌握 JVM 背后的原理并能熟练应用,写出高性能、易扩展、高可用的 Java 程序。
第三层境界是架构师或者框架、中间件的开发者需要修炼的,能够基于 JVM 的能力打造出自己的框架。
我们将通过 JVM 的五大体系循序渐进地展开,提升你对 JVM 的认知和使用 JVM 的境界。

第一章 JVM 概览

我会为你介绍 JVM 的由来,它的系统构成,以及当前云时代 JVM 面临的挑战及应对之法。不仅是为了让你了解 JVM 是什么,更是为了让你看清它未来发展的趋势,提前做好准备。

第二章 类与对象

这部分我会帮你理清楚 JVM 是如何支持 Java 语言的面向对象编程的。你不仅能了解到 JVM 的对象模型,还能看到对象是如何从你写的 Java 代码编译成字节码的,JVM 从类加载到空间分配以及最后回收的全流程,以及 JVM 那些为了应对云时代的挑战做出的优化。
理清对象创建与回收的潜在关联,了解 JVM 的反射机制能够帮助我们写出更加抽象,更易扩展的程序。我也会结合实际的代码和场景,把我对 JVM 体系化的认知和实际工作中的经验融合进去,让你今后设计系统时,更加得心应手,有章可循。

第三章 线程与变量

线程与变量就像汽车的发动机原理介绍,如果说面向对象是 JVM 为我们提供的语法糖,用来降低我们使用 Java 语言的门槛,那么线程与变量就像是汽车的发动机,是 JVM 真正运算的所在。作为一名普通的司机,你也许学完第二章的内容就可以开车上路了,但是作为顶级的赛车手,只有深刻了解发动机的原理,才能实现机械同感,达到人车合一的最佳状态。
通过这部分的学习,你不仅能掌握如何借助 Volatile 写出最优雅的单例模式 ,还能学习到 Volatile 底层的实现原理,了解 putIntVolatile 与 putOrderedInt 的区别,以及散落在 JUC 的各个源码中对这种优化方式的使用,感受 JUC 之父 Doug Lea 对性能的极致要求。当然如何更优雅地使用线程池,如何写出更高效的分布式程序以及最新的虚拟线程技术,我也会为你一一介绍,让你了解 JVM 底层原理如何做到对上层应用的支持。

第四章 JVM 中的编程范式

这部分我不仅会向你介绍 Decorator 等设计模式的使用以及函数式编程的特点,还会回归对编程本质的思考,带你看清设计模式与函数式编程的理论源泉,也就是人类对系统复杂度的思考和探索。
JVM 同时存在面向对象、面向函数两种编程范式,或者更准确地说是对面向过程和面向函数的支持。就像 Ruby 之父松本行弘在《代码的未来》一书中讲到的:“闭包跟面向对象是一棵树上的两个分支,实现的功能是等价的。”其实闭包才是和面向对象互为依赖的一对概念,而面向过程还是面向函数,才是标准的编程的两大流派,代表着图灵与阿隆佐·邱奇之争。一个代表着逻辑与语言,一个代表着物理与抽象。
而伴随着摩尔定律的失效以及云计算的崛起,传统物理机的概念逐步弱化,随着 Serverless 逐步走上历史的舞台,我们看到不管是 DDD 从领域对象到 Event Sourcing 的转型,还是 FaaS 的兴起,都在昭示着函数式时代的来临。而 JVM 以及使用 JVM 的你我,如何更好地迎接新时代的挑战,我也会在这一章为你一一讲述。

第五章 项目实战

这一章我将带你一起动手实践,打造你的第一个 AOT 编译的 GraalVM 应用,感受 JVM 的魅力。利用我们前面学到的知识点,体验如何全方位地提升系统的性能,如何直面生产中非常经典的 FULLGC、OOM 等问题,真正地解决这些生产中的问题。

寄语

我希望这个课程能像口袋书一样,当你日常遇到问题,需要设计一个高性能、高并发的系统时,能够给予你灵感,帮你找到更优的解决方案。更重要的是我希望这门课能在你的脑海中种下一颗思考的种子,在提升你的系统设计能力和软件编程技巧的基础上,帮助你养成体系化的思维,早日搭建属于你自己的知识框架。
你也可以把自己的知识框架分享出来,试想一下,当越来越多的人画出了他脑海中的知识框架,我们也汇聚了各行各业对于 JVM 的使用情况和知识体系,这对于在知识的海洋中漂流和迷茫的人,无疑是指路的灯塔。《论语》有云:“独学而无友,则孤陋寡闻”,也希望你能找到更多志同道合一起进步的伙伴。
当然这一切都离不开你的坚持,学习就像是一次逆人性的旅行,也像是一场修行,但是在这个知识爆炸,技术更新越来越快的时代,似乎除了终身学习,我们别无选择。不过我会一直陪你到最后一讲,期待与你更深入地交流。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

在云时代的挑战和机遇下,Java虚拟机(JVM)面临着新的应变之道。本文深入探讨了JVM在云时代的挑战和应对之道,强调了学习JVM的重要性,并介绍了一门设计精良的JVM课程。文章指出,云时代给Java带来了速度、内存、部署与管理等方面的挑战,但Java积极引入新特性来应对这些挑战,包括在JVM层面进行优化、支持更多的云原生特性等。康杨强调了学习JVM的重要性,尤其对于进行上层架构设计与规划的人来说,对底层技术实现与原理的深刻理解至关重要。他介绍了他设计的JVM课程,分为三层境界,通过JVM的五大体系循序渐进地展开,提升学习者对JVM的认知和使用JVM的境界。文章还提到了JVM中的编程范式和项目实战,以及对读者的寄语,希望读者通过学习形成体系化的思维,搭建属于自己的知识框架。整体而言,本文为读者提供了对JVM在云时代的挑战和应对之道的深入探讨,强调了学习JVM的重要性,并介绍了一门设计精良的JVM课程。

2023-08-2117人觉得很赞给文章提建议

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《云时代的 JVM 原理与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(17)

  • 最新
  • 精选
  • 进德修业
    拿下JVM的第一天@.@

    作者回复: 👍🏻,希望能坚持下去,期待你对JVM能有不一样的理解

    2023-08-21归属地:上海
    3
  • 红旗
    jdk8的LTS已经到2030年了,比11和17都要久,老师怎么看

    作者回复: JDK 8的长期支持一直到2030年是基于其广泛应用的现状。对于个人用户来说,可以根据自己的需求选择,如果你的应用不依赖8以后的某些新特性,那么使用JDK 8没有任何问题。 但是JDK的升级已经是大势所趋,只是时间的问题。

    2023-11-06归属地:北京
  • 韩非子
    想问一下老师,长期支持版17,21有很多改进点以应对java在云原生的挑战,但是企业又什么时候能够用上呢?感觉好像没有升级的动力,有点遥遥无期。又或者很久之后,大家不是升级,而是直接换了一种编程语言是不是也有很大的可能?比如go

    作者回复: 有几个方面可以关注下,其实当我们谈到JDK 17,21时候,还要增加一个考虑的维度就是JDK的提供商,目前华为、腾讯等都有自己的JDK,也都在快速的发展,所以有时候也许我们感知不是很明显,但是不代表他没有在发生。还有对于大的企业来说,如果升级JDK能够带来硬件成本的降低和效率的提升,其实是有很大的动力的。还有对于我们来说也许用java或者go都可以实现一个系统,但是很多大的公司,其实是基于某个编程语言的生态,以及历史系统迁移的成本的考虑,所以是一个综合的因素。但是,历史只会往前发展,提前布局,先人一步,还是建议可以采取的方式。

    2023-10-01归属地:陕西
  • Geek_6361c3
    看着很不错,值得一追

    作者回复: 有问题,欢迎随时交流

    2023-08-27归属地:湖北
  • 浩仔是程序员
    来咯

    作者回复: 欢迎━(*`∀´*)ノ亻!

    2023-08-25归属地:广东
  • 蝴蝶
    2023/8/24 开始打卡

    编辑回复: 加油,坚持✊

    2023-08-24归属地:广东
  • Levi
    老师可以讲一下生产可用的监控方案,以及处理解决方案吗?

    作者回复: 好的,我会在最后的实战篇中增加这部分,我在23年全球架构师峰会北京站讲的就是海量流量高可用的主题,你可以搜一下提前看一下,有问题随时沟通

    2023-08-24归属地:北京
  • 雷小鸿
    大佬你好:我最近感触很大,之前上家公司是公司依赖阿里云的各种云服务,各种方案和中间件都是找阿里云的服务做支撑,所有的服务都是上云的,能做到自动扩容和几乎一建发布,但是中国还有很多像学校,医院,事业单位的服务,他们要求都在自己的服务器本地部署,有一部分是数据安全的考虑,这种服务有没有可能也云化,针对学院,医院,事业单位的服务有什么好的部署服务化的看法或者建议没

    作者回复: 现在混合云的方式也是比较多的

    2023-08-23归属地:陕西
  • 周想想
    开始第一天,继续坚持

    编辑回复: 加油✊

    2023-08-23归属地:湖南
  • 仗剑走天涯
    打卡,打卡!!靡不有初,鲜克有终

    编辑回复: 一起学习~

    2023-08-22归属地:山西
收起评论
大纲
固定大纲
云时代 JVM 的应变之道
为什么一定要学好 JVM?
这门课是怎么设计的?
第一章 JVM 概览
第二章 类与对象
第三章 线程与变量
第四章 JVM 中的编程范式
第五章 项目实战
寄语
显示
设置
留言
17
收藏
16
沉浸
阅读
分享
手机端
快捷键
回顶部