让我们沿着记忆之路走一走,了解一下graalvm这位超级英雄。想象一下你在一个聚会上,每个人都在说不同的语言——Java、JavaScript、python、ruby,甚至还有一些晦涩难懂的语言,比如 r。在这种混乱之中,你希望有人能理解所有这些语言并且可以无缝翻译。 graalvm 是您多语言最好的朋友,它可以在单个运行时中运行、优化甚至统一这些语言。但我们是怎么到这里的?
原因:graalvm 解决了什么问题?
在传统的 java 世界中,jvm 已经是一颗摇滚明星,为数十亿设备提供支持,并像专业人士一样运行 java 程序。但它有一个致命弱点:多语言编程。如果您希望 java 代码与 javascript 或 python 对话,感觉就像隔着鸿沟大喊一样。性能下降、互操作性难题和调试噩梦让开发人员哭着喝着咖啡。
此外,高性能应用程序需要更快的启动速度和更低的内存占用——这是优秀的 jvm 难以提供的。开发人员梦想的解决方案可以:
- 同一个平台支持多种编程语言。
- 通过尖端的即时 (jit) 编译优化性能。
- 允许提前 (aot) 编译,以实现闪电般快速的启动。
进入 graalvm
graalvm 是根据 oracle 实验室的这些需求而诞生的,天哪,它实现了!这个“通用虚拟机”打破了障碍,改写了运行时的规则。
什么:graalvm 是什么?
graalvm 是一个高性能运行时,支持:
- 多种语言:java、javascript、python、ruby、r,甚至基于 llvm 的语言,如 c 和 c 。
- 互操作性:语言之间可以进行本地对话,无需翻译。
- 性能优化:使用先进的 jit 编译器来提高性能。
- 提前编译:将 java 应用程序转换为本机可执行文件,大大减少启动时间和内存使用量。
方法:graalvm 的底层
要理解 graalvm 的魔法,我们需要剖析它的组件:
-
graal jit 编译器 传统 jvm 使用 c2 编译器进行 jit。 graalvm 将其替换为 graal jit 编译器,它是用 java 本身编写的。为什么这很重要?因为用 java 编写编译器可以更轻松地优化和更好的可维护性。
-
truffle 框架 这是多语言支持的秘密武器。 truffle 提供了一个抽象层,允许不同语言的解释器在 graalvm 运行时上高效运行。将其视为《星际迷航》中的通用翻译器。
-
本机映像 graalvm 的本机映像工具会获取您的 java 应用程序并将其编译为独立的二进制文件。该二进制文件包含所有必需的运行时组件,因此它甚至不需要 jvm 即可运行!这会带来极快的启动速度并减少内存使用量。
-
多语言运行时 想象一下直接从 java 调用 python 函数或在 java 应用程序中运行 javascript。借助 graalvm,您可以无缝地完成此操作,并且运行时可确保最小的性能开销。
何时:何时使用 graalvm
graalvm 不是一种万能的解决方案,但它非常适合:
- 微服务:native image 支持轻量级、快速启动的服务,非常适合 kubernetes 等容器化环境。
- 多语言应用程序:如果您需要多种语言才能很好地协同工作,graalvm 就是您的游乐场。
- 高性能应用程序:其先进的 jit 编译器可以充分发挥应用程序的每一点性能。
- 无服务器计算:本机可执行文件对于需要快速启动的无服务器平台来说是一个福音。
原因:为什么要使用 graalvm?
这就是为什么 graalvm 应该出现在你的工具箱中:
- 速度:运行时(感谢 jit)和启动(感谢 native image)。
- 内存效率:本机可执行文件占用的内存更小。
- 互操作性:语言之间的无缝交互。
- 开发人员生产力:用多种语言编写应用程序,而不必担心运行时的戏剧性问题。
- 面向未来:就像从翻盖手机升级到智能手机一样。传统的 jvm 很好,但是 graalvm 更好。
如何开始使用 graalvm
这是启动您的 graalvm 之旅的快速实践指南:
安装
- 从官方网站下载 graalvm 。
- 安装所需的语言包(例如,安装所需的语言包(例如,gu install python for python)。
- 将 java_home 设置为指向 graalvm 安装。
运行java应用程序
$ javac helloworld.java $ java helloworld
创建原生镜像
$ javac helloworld.java $ native-image helloworld $ ./helloworld
就是这样!您已经创建了一个独立的二进制文件。
多语言编程
这是从 java 调用 javascript 的示例:
import org.graalvm.polyglot.Context; import org.graalvm.polyglot.Value; public class PolyglotExample { public static void main(String[] args) { try (Context context = Context.create()) { Value result = context.eval("JS", "5 + 10"); System.out.println("Result: " + result.asInt()); } } }
graalvm 如何脱颖而出
以下是 graalvm 与传统 jvm 的快速比较:
参考
结论
graalvm 是一个游戏规则改变者,为开发人员的武器库带来了性能、互操作性和多功能性。无论您是在构建微服务领域的下一个重大产品、优化遗留应用程序,还是只是研究 jvm 世界中最酷的工具,graalvm 都值得探索。这种创新会让你感叹,“哇,未来就在这里,而且是多语言的!”