GraalVM到底是何方神圣?

这篇具有很好参考价值的文章主要介绍了GraalVM到底是何方神圣?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

GraalVM到底是何方神圣?

JVM的弊端

JVM实现了跨平台,使得一次编译即可到处运行,但是詹姆斯·高斯林没有跟你说的是,应用运行之前要先启动JVM虚拟机,然后还要加载一大批的类、并做链接和初始化等步骤,而使得光启动一个JVM就得花一大把时间,JVM启动完之后才能执行应用程序本身的启动工作,比如启动Spring容器、启动Tomcat等等。

在一些场景下,集群需要做动态扩缩容,这个动作当然是越快越好,不可能请求过来了,花了半天时间来启动应用,等应用启动完,客户端那边都已经超时了。

特别像目前也比较火的FaaS,更加需要应用程序能快速的启动。

GraalVM与Go

所以,近几年来,Go语言火了,Go语言是一种编译型语言,我们需要先把Go代码直接编译成为一个二进制执行文件,比如windows上的exe文件,然后直接运行exe文件就能快速启动程序。

如果说,十年前,Spring是Java的春天,那现在GraalVM就是Java的救世主,Java要想不被Go挤掉,整个Java生态都要向GraalVM靠齐。

GraalVM提供了很多功能,其中一个功能就是能把Java代码直接编译成为二进制文件,比如exe文件,从而使得Java程序也能够快速启动。

GraalVM与Docker

目前,大部分Java应用应该都是运行在Docker容器中,这就需要Docker容器中也要安装JDK或JRE,但是如果利用GraalVM将Java应用编译成为了exe文件,那么我们就可以直接把exe文件打成一个Docker镜像了,从而不需要在Docker中按照JDK了,这样将使得Docker容器更加小巧,也更加适应自动扩缩容。

GraalVM的缺点与未来

GraalVM为了把Java程序编译为一个可执行的二进制文件,需要预先确定程序中用到的所有类,但是Java程序中很有可能某些类是动态生成的,比如很多框架中都用到了动态代理,从而程序运行过程中会动态生成一些类。

为了解决这个问题,比较笨的办法是,通过配置文件指定哪些类是动态生成的,比较聪明的办法是,先运行一下程序自动找到哪些类是动态生成的。

GraalVM这两种办法都是支持的,这样对于Spring、SpringBoot这些框架就能省事很多了,

这样,对于一个SpringBoot应用程序,就可以利用GraalVM将它编译成为一个可执行的二进制文件了。

当然,Spring及SpringBoot为了进一步提升启动速度,Spring及SpringBoot自身也做了一些优化,比如Spring AOT将Bean扫描转移到了编译期来做,从而能进一步提升启动速度。

后续

今天,简单聊聊GraalVM,后续会出GraalVM的实战教程,以及Spring AOT的底层实现原理,希望大家能点赞、分享、在看。

 文章来源地址https://www.toymoban.com/news/detail-420138.html

到了这里,关于GraalVM到底是何方神圣?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flutter实现Service + UI 全面跨平台

    作者:Karl_wei Flutter作为跨平台的UI框架,其可行性已经被市场所认可。UI跨端后,我们自然会希望一些运行在 终端的小服务也能跨端 ,特别是当这个小服务还涉及到一些 UI 的展示。 我们希望Flutter能承担这个角色,让其跨端能力更进一步。 我们希望在整机设备上,运行一个

    2024年02月12日
    浏览(45)
  • golang实现rpc方法二:使用jsonrpc库【跨平台】

    首先在golang实现rpc方法一net/rpc库中实现了RPC方法,但是那个方法不是跨平台的,没法在其他语言中调用这个实现的RPC方法,接下来我们可以通过jsonroc库实现跨语言的RPC方法。俩种实现方式的代码其实也是差不多的,大差不差,只是调用的库不同。 serverrpc.go实现代码如下 cl

    2024年01月17日
    浏览(53)
  • Verilator的DPI-C机制:实现跨平台的函数调用

    笔者正在搞ysyx,需要用到Verilator的DPI-C机制。虽然STFM比较容易学会,但本着学习和记录的目的,还是写一篇文章出来。 DPI-C机制,简单来说就是你可以在C语言中实现一个函数,却在Verilog中调用!在验证的过程中无疑会有很大的助力!   下面来个例子吧: 比如我需要在.v中调

    2024年02月06日
    浏览(90)
  • [MAUI程序设计] 用Handler实现自定义跨平台控件

    @ 目录 Handler 与Xamarin.Forms实现的区别 为什么要用Handler代替Renderer 解耦 生命周期管理 更细粒度的控制 用Effect来实现呢? 自定义手势监听控件 在各平台上实现TouchRecognizer iOS中的实现 Android中的实现 Windows中的实现 创建控件 使用控件 最终效果 项目地址 今天来谈一谈MAUI跨平台

    2024年02月07日
    浏览(53)
  • 语义网与云计算:如何实现跨平台的数据共享和协同

    语义网和云计算是当今最热门的技术趋势之一,它们为人工智能、大数据分析和实时数据处理提供了强大的支持。在这篇文章中,我们将深入探讨语义网和云计算的核心概念、算法原理、实例代码和未来发展趋势。 语义网是一种基于语义技术的网络,它旨在解决信息的语义差

    2024年04月15日
    浏览(40)
  • 【Flutter跨平台插件开发】如何实现kotlin跟C++的相互调用

    在 Kotlin 中,可以使用 JNI (Java Native Interface) 来调用 C++ 代码 调用步骤: 创建 C++ 文件并实现函数。 在 Kotlin 中声明需要调用的 native 函数并加载 native 库。 调用示例 Flutter 插件项目的例子 在 Flutter 插件中引用已有的 C++ 源码需要以下步骤: 首先,在 Flutter 插件的 android 目录下

    2024年01月25日
    浏览(59)
  • golang实现rpc方法一:使用net/rpc库【不能跨平台】

    使用golang官方的net/rpc库实现RPC方法,使用http作为RPC的载体,通过http/net包监听客户端连接请求。 rpc服务端实现代码serverrpc.go如下 上述服务端程序运行之后,将会监听本地的8090端口,我们可以实现一个客户端程序,连接服务端并且实现RPC方法调用。 rpc客户端实现代码clientr

    2024年01月17日
    浏览(55)
  • 【微软技术栈】基于.NET MAUI跨平台电子白板的设计与实现

    1、摘 要 随着科技的发展,电子白板功能已经普及到视频会议、在线课堂、企业、学校乃至其他更多行业。在多种移动设备并存的大环境下,为每个平台(如:Android、IOS、Windows等)都编写一套代码,无论是前期开发还是后期维护,成本都会增加。另一方面,移动互联网经过

    2024年02月06日
    浏览(60)
  • 跨平台开发神器如何在Uniapp中使用WebView实现与Web页面的通讯!

    Uniapp 是一个跨平台的开发框架,可以同时开发出 iOS、Android、H5 等多个平台的应用。在开发过程中,我们可能需要与 Web 页面进行通讯,这时可以使用 WebView 组件来实现。 本教程将介绍如何在 uniapp 中使用 WebView 组件与 Web 页面进行通讯。 首先,我们需要创建一个 uniapp 项目。

    2024年02月09日
    浏览(53)
  • 无需云盘,不限流量实现Zotero跨平台同步:内网穿透+私有WebDAV服务器

    🔥 博客主页 : 小羊失眠啦. 🎥 系列专栏 : 《C语言》 《数据结构》 《Linux》 《Cpolar》 ❤️ 感谢大家点赞👍收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 Zotero 是一款全能型 文献管理器

    2024年02月05日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包