02|挑战与趋势:云原生时代JVM的演进之路
趋势的力量
云原生时代
- 深入了解
- 翻译
- 解释
- 总结
JVM在云原生时代的演进之路 云原生时代对JVM构成了挑战与趋势的交织,这一现象引发了JVM的演进之路。文章首先回顾了编程领域的历史趋势,强调了对趋势的预判对技术发展的重要性。随后,文章详细介绍了云原生时代的发展趋势,包括无服务器、容器化、Kubernetes、分布式等方面。接着,文章指出了云时代对JVM的挑战,包括启动时间、启动性能、内存占用和面向对象等方面。最后,文章探讨了JVM的发展趋势,包括拥抱容器化和AOT原生镜像编译等方面。总的来说,文章深入浅出地介绍了JVM在云原生时代的演进之路,展现了JVM在面对挑战时的积极应对和发展趋势。 在JVM的演进过程中,一些关键技术和趋势值得关注。首先是JVM对函数式编程的支持不断增强,通过逃逸分析、栈上分配等操作提升栈的利用效率,同时引入Epsilon垃圾收集器和Lambda表达式的改进,彰显了JVM在加强函数式编程方面的努力。其次,GraalVM作为高性能JDK发行版,通过全新的即时编译器和AOT编译支持,大幅提升了在JVM上运行程序的性能,更适应在云原生环境下运行。此外,JVM版本的快速更迭和不断出现的JVM提供商,也为JVM的持续迭代提供了重要的支持。 总的来说,JVM的发展方向主要包括性能优化、对容器化的支持以及安全性和可靠性的提升。这些发展趋势将有助于JVM适应云原生时代的需求,为读者提供了对JVM在云原生时代的演进之路的全面了解。 通过本文的总结,读者可以快速了解JVM在云原生时代的发展趋势和面临的挑战,以及JVM在适应新时代需求方面的积极应对和发展趋势。
《云时代的 JVM 原理与实战》,新⼈⾸单¥59
全部留言(3)
- 最新
- 精选
- 临风说一下我的感受,工作中大部分人都不会使用面向对象这一特性,因为这需要一定的抽象封装能力。我遇到最多的代码就是过程式的,对象只是作为DTO存在,只有get/set逻辑,大量的业务逻辑都是平铺直叙,一个人写的代码其他人很难直接复用。 为什么会造成这样的情况,就是因为spring这类基础框架封装的太好了,即使不使用面向对象的思维,仍然能完成任务。而开发时间少,人员流动快,进一步加剧了这个情况。对于开发人员,封装和抽象一定是需要花费更多的时间思考的,还往往伴随着对老代码的重构,出错的风险也加大了。相反,如果只追求完成功能,简单copy一下,修改一下就能解决,谁还管之后好不好维护呢。 对我而言,写代码还是喜欢用面向对象的思路,因为这样的单元测试是最好写的,依赖是最简单的,而且这样写代码才有乐趣,copy代码会让我感觉很无聊。但我不知道这样的现象是不是很普遍,不知道老师对于这个现象有什么看法?
作者回复: 编程的本质是什么?面向对象和面向函数,面向过程是什么关系?很多人其实的认知被封印在一个习惯性的范围内,就像柏拉图的洞穴隐喻讲到的,其实可以跳出固有的思维去考虑下,包括DDD是什么,DDD和面向对象的关系,我的经验思考本身其实比掌握某些知识更重要,水有万千重,我们又能看到那一重呢,其实整个教程,其实是想表达我的对编程本身的理解,不仅仅的知识点的传播,建议自己品味第一篇,也许会有不一样的发现,我也会在后面陆续展开,从不同方面来讲明我的思考
2023-08-23归属地:广东22 - peter请教老师几个问题啊: Q1:“面向对象”其实是“面向过程”吗? 开篇词部分,老师认为“面向对象”其实是“面向过程”,是这样吗?(也许我的理解是错误的) Q2:一个APP对应一个JVM吗? 后端程序,或者手机上的安卓APP,一个应用都会起一个JVM吗? Q3:Oracle JDK收费了吗?我以前都是在Oracle官网上下载JDK的,并没有收费啊。不过近几年没有下载了,以前用的版本也是8或者11.现在收费了吗?收费是怎么体现的?付费才能下载JDK吗? Q4:老师推荐用哪个JDK?作为小公司的网站开发者,还是用Oracle的JDK吗?另外,JDK用哪个版本?好像要从JDK17起步了啊。 Q5:函数式编程怎么理解? 用Class,Class也主要是由函数组成的,代码流程也是调用不同的函数啊。函数式编程特殊在哪里?
作者回复: Ruby之父松本行弘在《代码的未来》 一书中讲到的,“闭包 跟 面向对象 是一棵树上的两条枝 ,实现的功能是等价的” 其实闭包才是和面向对象互为依赖的一对概念,而面向过程还是面向函数,才是标准着编程的两大流派, 代表着图灵与阿隆佐·邱奇之争。函数式编程我会在第三篇为大家分享我的理解,但是见你提前了解下,欢迎到时候一起探讨。目前JDK 8还是主流,但是11和17已经逐步在各个大厂应用了,所以提前学习这些,对于去更大的平台也是一个很好的敲门砖。所有的技术选型没有一个最佳的方法,建议还是因地制宜,选择最适合的,因为技术是持续演进的。 对于后端程序,一般来说,每个应用都会运行在自己的JVM实例上。每个Java应用程序通常会创建一个独立的JVM进程,该进程负责运行应用程序的代码。每个JVM进程都有自己独立的Java虚拟机实例,包括堆、线程、类加载器等,用于执行应用程序的逻辑。在安卓平台上,每个应用程序并不会起一个独立的JVM,而是共享一个全局的虚拟机实例,并运行在独立的进程中。
2023-08-23归属地:北京2 - Jaising引用下周志明大佬在 2020 年 QCon 大会上的分享《云原生时代,Java 的危与机》,视频地址:https://time.geekbang.org/opencourse/detail/100067401,文本地址:http://icyfenix.cn/tricks/2021/geekbang.html。与康老师很多观点是类似的: 1、Java 的平台无关性优势被容器削弱了很多 2、Java 面向大规模长时间运行的服务端应用设计,容器亲和性差,内存消耗、启动时间、镜像体积等都无法与云原生语言媲美 3、Java 也在做着转型努力,比如致力于脱离 JVM 直接运行原生代码的 Leyden,提前识别编译的 GraalVM,提高内存利用率的 Valhalla,以同步代码风格解决异步执行问题的 Loom,减少镜像体积的 Portola 等 从目前大规模使用的语言市场分析,Java 还是更适合应用层面,面向业务、多人协作,Rust 和 Go 成为了中间件的新兴力量,C 则持续在操作系统层面耕耘。2023-08-31归属地:浙江16