GraalVM下一代JVM到底是什么?

GraalVM下一代JVM到底是什么?

作者: 咖啡拿铁 2021-06-07 08:32:47

云计算

虚拟化 再说GraalVM之前,我们先来聊聊JVM,JVM也就是我们的java虚拟机,如果我们想要运行Java程序,那就需要在JVM上进行运行,通过Jvm将我们的代码翻译成机器能理解的代码,然后执行。那么我们JVM是只能运行java的嘛,当然不是,我们还有很多比较出名的语言比如,Scala,Groovy都是通过各自的编译器编译成java虚拟机对应的字节码,然后来进行执行。

[[404037]]

本文转载自微信公众号「咖啡拿铁」,作者咖啡拿铁。转载本文请联系咖啡拿铁公众号。

背景

上周有幸去QCON听了一下各个公司大佬的技术分享,但是至于收获嘛,知识没带走多少,带走了不少展台送的小礼品,哈哈~。图片

其实挺这种大会想要真正的了解细节还是难,主要还是了解行业新趋势,技术新动态,其中阿里有个冷启动加载技术的分享,提到了一个技术叫GraalVM,这个单词之前或多或少不经意间看见过,但是一直没有了解过,正好这位阿里的大佬再次提及这次技术,没想到这个技术如此强大,于是下来便细细的查阅了一些资料,想和大家分享一下。

GraalVM是什么?

再说GraalVM之前,我们先来聊聊JVM,JVM也就是我们的java虚拟机,如果我们想要运行Java程序,那就需要在JVM上进行运行,通过Jvm将我们的代码翻译成机器能理解的代码,然后执行。那么我们JVM是只能运行java的嘛,当然不是,我们还有很多比较出名的语言比如,Scala,Groovy都是通过各自的编译器编译成java虚拟机对应的字节码,然后来进行执行。

再来回到GraalVM,乍一看好像是Graal这个语言的虚拟机,其实不是的,GraalVM是ORACLE开发的一款“通用”虚拟机,怎么理解这个通用呢?上面我们说到JVM可以支持除了Java以外的语言,那么GraalVM他是可以支持JavaScript,Python,Ruby,C和C ++以及JVM语言等等(理论上来说只要做对应语言的开发,所有语言都可以支持)。

但是这里要值得注意的是GraalVM是用java写的,所以作为一个JAVA程序员如果想修改虚拟机的代码,是不需要理解C++或者C等语言的。

GraalVM作用是什么?

启动加速

在QCon上还有一些技术听得比较多,那就是k8s,serverless等等,我们知道弹性扩展是其中的核心,比如当我们的集群出现突发流量的时候,一般这个时候会快速扩容机器,但是由于我们的Java的特性,带来两个方面的慢:

  • 启动慢:当我们启动JAVA的时候,也就是将我们的class文件加载到jvm中,这个加载class可是一笔不小开销,需要检索,验证,解析等等。
  • 启动后开始运行慢:我们知道java代码在启动后的一段时间之内是解释执行的,如果想要达到编译执行,是需要借助我们的JIT技术,将其直接编译成机器码执行,从而达到高效执行,这个也就是我们所说的预热。

从QCon上截取了一张图,也就是我们java编译技术演进。

前面两个阶段也就是大家平常比较熟悉的阶段,通过翻译和c1编译和c2编译来进行代码执行,而第三部分出现了一个AOT技术,也就是静态编译,可以在执行代码之前就将我们的代码编译成机器码,和C++一样,但是由于JAVA有很多动态特性,一般我们利用jaotc来对jdk自带的包进行静态编译,然后其他的包依然采用翻译和jit执行。

所以就迎来了第四阶段SubstrateVM(后面简称SVM),这个是基于Graal的AOT框架,他可以将我们的动态特性也可以进行静态编译,可以想一下Java里面最动态的其实就是反射,比如你要执行某个类的方法,你可能会这么写:

  1. String method = "xx"
  2.  
  3. object.invoke(method); 

可以发现我们的方法其实是一个字符串并且还是一个动态的变量,那这种这么动态的东西如何做到静态编译了,阿里内部是通过观察,比如这个程序上去跑个几周,获取invoke的所有场景,然后一起进行编译,当时也提问到如果这个有没有观察的怎么办呢,那么这个的确就会报错,所以这一块的使用的确是个问题。

通过静态编译完成之后,我们的性能有得到提升吗?

从上面的性能数据来看,我们的性能和Go是相当的,内存只有Go的一半,怪不得他们都在说Graal就是用来替代go的。

同时Graal编译器也可以替代C2编译器,在twitter和facebook内部生产环境已经使用Graal进行替换C2。

所以对弹性伸缩,启动速度要求比较高的程序,可以考虑将GraalVM作为自己的虚拟机选择。

多语言调用

上面说过我们GraalVM支持很多语言,设想一下我们有个这样的需求,java做服务器的开发,python或者R语言去做数据分析,以前我们可能需要调用Rpc去做这样的事,现在我们可以将他们放在同一个项目或者同一个文件当中,利用GraalVM的特性就可以做到这样的事

总结

 

GraalVM的确是一个比较新的技术,他的整个野心也看得出来是非常大的,毕竟想做的是一个通用的虚拟机,如果他做起来的话,对Java程序员是比较好的,因为这个是用Java进行开发的,大家其实有兴趣可以下来在搜索一些资料再了解一下。

 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/289039.html<

(0)
管理的头像管理
上一篇2025-05-16 14:46
下一篇 2025-05-16 14:48

相关推荐

  • 云服务器和云虚拟主机怎么选?云服务器和虚拟主机区别

    云服务器适合业务增长快、需弹性扩展的场景,而云虚拟主机适合预算有限、技术门槛低的小型静态网站或测试环境,二者核心区别在于资源独享性与运维复杂度,核心差异解析:从底层架构到使用体验很多人容易混淆这两者,觉得它们都是“买空间建站”,它们的底层逻辑完全不同,云服务器(ECS)就像是你租了一整栋别墅,水电网络独立,你想……

    2026-06-29
    0
  • 赣州智慧旅游招聘是真的吗?赣州旅游人才招聘信息

    中级岗位(3-5年经验)月薪范围通常在6000-10000元,这类岗位需要独立负责项目模块,如独立运营一个抖音账号,或维护一个景区小程序的功能迭代,具备成功案例的候选人议价能力较强,高级岗位(5年以上经验)月薪范围通常在10000-20000元,部分核心管理岗可达更高,这类人才需要具备战略规划能力,如制定整个景……

    2026-06-29
    0
  • 赣州智能物联网车位锁如何管理?智能车位锁管理系统多少钱

    赣州智能物联网车位锁管理的核心在于通过云端平台实现远程控锁、状态实时监控及自动计费,彻底解决传统车位“被占难管”与“找位难”的痛点,在赣州这样的城市,随着机动车保有量的持续增长,老旧小区、商业综合体以及私人固定车位的资源矛盾日益凸显,传统的机械地锁或简易遥控锁,不仅操作繁琐,更无法实现数据化管理,引入智能物联网……

    2026-06-29
    0
  • 赣州智能消防栓好用吗,智能消防栓多少钱一个

    赣州智能消防栓通过物联网技术实现实时监测与远程报警,能显著降低火灾响应时间并提升城市消防安全管理水平,是目前智慧城市建设中不可或缺的基础设施,赣州智能消防栓的核心价值与应用场景传统消防栓往往存在“看不见、摸不着、用不了”的痛点,在赣州这样地形复杂、老城区与新城区并存的区域,传统设施的管理难度极大,智能消防栓的出……

    2026-06-29
    0
  • 云服务器和物理机到底有啥区别?

    云服务器本质上是虚拟化资源池中的弹性实例,而传统物理服务器是独占的硬件实体,前者胜在弹性与运维便捷,后者强在物理隔离与性能稳定,具体选择取决于业务对成本、扩展性及安全合规的权衡,很多人初次接触服务器时,容易把“云服务器”和“传统物理服务器”混为一谈,觉得它们都是用来跑网站或存数据的盒子,这两者的底层逻辑完全不同……

    2026-06-29
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注