原创 | 你知道什么是Graal VM吗?全栈虚拟机?猛!
作者 | ithuangqing
来源 | 编码之外(ID:ithuangqing)
世界上最好的语言是java,不服来战!😎
Java说,总有人想害朕
听说啊,在程序员中一直有这样的一个鄙视链:C 语言工程师鄙视 C++ 工程师,C++ 工程师鄙视 Java 和 C# 工程师,Java 工程师和 C# 工程师则互相鄙视,所有的工程师都鄙视PHP工程师。
哈哈,PHP的各位是不是尴了个大尬了😁,没事,反正“PHP是世界上最好的语言”
我们先来看看这个:
嗯嗯,Java还是第一,哈哈,不过作为天下第一的Java,总避免不了被挑战,而且最近听到越来越多类似“ xx语言有望取代java,有望登顶”的言论,比如说Python啊,对不对,毕竟Python真的有点猛啊,而且最近还听说Go,反正这个XX可能是任何一门编程语言,毕竟谁都想做老大啊!😏
不过作为常年霸榜的java可不是你说想取代就取代的,而且java还有不少猛料,天下第一岂是你能撼动的!😎
java哪来的自信
作为一名java爱好者,我就非常自信的说,java可不是你想动就动的了的,再说了,java好像也从不惧怕被任何一门语言所取代,毕竟人家是“实力派”,可不是那些所谓的“流量小生”
我们知道java语言本身有很多的优点,当然啦,这些优点可能其他语言也有,甚至其他语言还有一些特色是java语言所没有的,其实啊,java也不在乎这些,因为对于java来说,人家除了优秀的语言本身之外,还有非常活跃和庞大的生态,这个是真的猛。
说个最直接的例子,你就看吧,培训机构可以没有Android或者其他,但是一定会有java,那些在线教程网站,一定会有java的课程,而且还偏多,你要是想在网上找个学习资源,你可以对比一下,java相关的资源是真的多。
所以啊,简而言之,java人家这猛的一批的生态,不是其他语言说取代就取代的,所以想学编程的,java一定是个不错的选择,另外在学习java的,好好学习吧,前景必须可以滴!
当然,科技在进步,社会在发展,很多语言都在不断的迭代,变得越来越猛,很多优秀的功能特性不断发布,作为天下第一的java必须不能落后啊,可能你只知道自己现在还在用JDK7或者8嘞,可人家已经13了,但是,java的猛料可不止这些。
来,跟着庆哥一起涨姿势吧!😂
黑科技:Graal VM
第一看到,这啥啊,VM不就是虚拟机吗?那这个?可以的,你知道了那么一丢丢!
Graal VM这是啥玩意
Graal VM可是个好东西,它是Oracle Labs在2018年4月的时候对外公开的一个黑科技,了解了之后,惊呆了,这玩意真猛!
可能有人对Oracle Labs不太了解:
Oracle Labs的任务很简单:识别,探索和转让具有极大改善Oracle业务潜力的新技术。
可以去官网看看:Oracle Labs
给你先截个图吧,你瞅瞅:
看到了,我们要说的猪脚Graal VM,不不,是主角😂,看来这家伙和java虚拟机有关啊,看它的描述:GraalVM是Java虚拟机的新运行时,它为多种语言(包括Java,JavaScript和Ruby)提供了高性能的执行环境
大眼一看,有点猛(懵😂),我们都知道java非常经典的一句名言吧:
Write Once,Run Anywhere
Run Programs Faster Anywhere
而这个Graal VM也提出来了一个口号:
Run Programs Faster Anywhere
用我蹩脚的英语给大家翻译一下就是:以更快的速度运行程序
怎么样,有没有一种和 Write Once,Run Anywhere 惺惺相惜,互相爱护的赶脚😂
如果你学习过java虚拟机的话应该知道,我们现在普遍谈论的JVM一般是指的HotSpot,为啥,人家牛,所以流行呗,而这个Graal VM其实就是在HotSpot的基础上扩展而来的,既然是扩展,那扩展后肯定比原来的牛X啊,我们知道HotSpot只是针对java语言实现跨平台的虚拟机,也就是专门为java服务的。
而Graal VM经过一扩展之后可不得了,人家不满足于只服务于java了,人家现在可是要做 全栈虚拟机 啊,啥是全栈知道吧,就是你啥都要会,前后端一起搞😂,所以这几个全栈虚拟机也就好理解了,人家的目标是要为绝大部分流行的语言服务,不单单是java自己了。
JVM那些事
在此之前,我们知道,像java,Scala,Groovy和Kotlin都是可以运行在java虚拟机之上的,啥意思,也就是这么个意思:
也就是说,这些代码可以生成统一的中间代码,即是字节码文件,然后可以统一运行在JVM上,再来看针对java而言是如何实现跨平台的:
再来深层次的看看与操作系统的交互:
这里加入了没有虚拟机支持的C/C++,明白了这个,再来看Graal VM这个全栈虚拟机,这下知道了它的野心了吧!
你HotSpot只是为java体系这些语言服务,统一生成字节码文件来运行,但是咱就不同,你支持的我支持的更好,你不支持的我也支持,比如像C/C++、JS、Python和R语言等,咱都支持。
Graal VM的基本工作原理是啥
想一下,根据java虚拟机的原理,可以猜想一下Graal VM的基本工作原理,我们知道无论是java还是Kotlin都需要经过编译后生成字节码文件交给jvm来运行,也就是说对于jvm,它是与字节码打交道的,所以啊,字节码文件相当于一个中间表示,那对于Graal VM是不是也一样,要想实现对更多的语言的支持,那就需要把这些语言,比如JS,需要把它编译后的特定格式代码或者直接源代码通过一种特定的解释器转换成Graal VM可以认识的中间代码,就比如jvm中的字节码文件一样。
不过在Graal VM中可以定的是它的中间代码不再是字节码文件了。当然,Graal VM本身就是在HotSpot之上发展而来,所以完全可以作为一个java虚拟机来使用,
那么,可能有人有疑问了,那作为java虚拟机来说,有什么区别呢,他们俩啊,主要的区别就是在即时编译技术上,另外啊,针对Oracle Labs目前最新的即时编译技术的研究可都是迁移在Graal VM来进行的哦。
所以啊,Graal VM不可忽视啊,很猛的一个家伙啊!
Graal 编译器
Graal 编译器又是啥
看到这个名字就知道这家伙和上面说的Graal VM有关系啊,是的,这个Graal编译器就是来自Graal VM,它是从jdk10开始,在HotSpot中加入的一个全新的即时编译器。
这是干啥的啊,我们知道,我们编写的应用,有的时候需要长时间有运行,另外,你一定听说过热点代码,对于那些需要长时间运行的代码而言,经过一定的预热,热点代码就会被HotSpot中的探测机(目前知道这么一回事即可)捕获到,然后这些热点代码就会被编译成硬件可以直接执行的机器码,那么这样的应用,他们的效率主要就是看即时编译器输出的代码质量了。
HotSpot有哪些即时编译器
目前啊,对于HotSpot虚拟机来说,它的里面有两个主要的即时编译器,简称C1和C2:
C1:编译耗时短,但是输出的代码优化程度有点低
C2:编译耗时长,相对的,输出的代码优化就好点
那么这个新的Graal 编译器自然就要集众家之长了,Graal 编译器其实是用来代替C2编译器的,Graal 编译器实际情况是输出代码的质量保持和C2的一致,另外在开发效率和扩展性上都要强于C2,当然,它的编译时长也得到了很大优化。
既生瑜何生亮
其实C2也很优秀,但是由于C2时间有点长,代码真的太复杂了,扩展起来有点难,毕竟没有完美的,需要不断的优化迭代,但是过于复杂的C2维护起来着实有点困难,所以必须搞个替代品,这个替代品必须总体设计上和C2接近,并且扩展性强,这样就可以把C2优秀的特性给移植过来,除此之外,可以增加更多优化和新的特性,但是如果想要在原有的C2上进行优化和新增那就有点困难了。
所以Graal 编译器就来了!值得一说的,Graal 编译器的效率已经追上了老牌C2,而且有些方面比C2还要强!
不过嘞,Graal 编译器还是有点年轻,多以啊,它还是个实验状态,因此要想使用它,需要使用开关激活,也就是需要指定参数来开启它,不然默认是不会使用Graal 编译器的。
总的来说啊,Graal 编译器很有潜力啊,相信未来一定会作为主要的即时编译器来使用,这样的话就会使用HotSpot和Graal VM更牛X了。
感谢阅读
感谢各位大大的阅读🥰
如果你喜欢本文
请长按二维码,关注编码之外
好文章,我在看❤️