从GraalVM到Quarkus系列-A000篇-忽悠你用GraalVM

从GraalVM到Quarkus系列

A000篇-忽悠你用GraalVM
A001篇-NativeImage相关的注解
B001篇-NativeImage相关的注解@TargetClass
A002篇-GraalVM中的动态代理


准备好你的秀发

欢迎来到从入门到放弃系列第A000篇…

这玩意儿是啥?

Oracle 几年前出的一个虚拟机(类似JVM,但又不一样,甚至都不能算一个具体的虚拟机,它是一套组件),我记得两年前在掘金上还喷过,说Oracle出品的东西不敢用,现在看来,真香~~

  1. 科普定义的东西就不多说了,网上可以搜到,我们只关注它JVM-based以及Native Image相关的知识
  2. JVM-based就是Java,Scala,Groovy,Kotlin等基于JVM的语言
  3. Native Image可以理解为将字节码编译成原生程序一种技术(不带JVM那种,但是仍然可能附带一个小的运行时)
  4. 以上都是通俗的讲,并不是定义,只是便于理解,有些东西和实际是有一丢丢偏差的

为啥我们要用GraalVM?

  1. 运行内存占用低,很低…
  2. 程序启动快,很快…
  3. 部署不需要运行时,也就是可以直接运行,不需要提前安装JVM,docker镜像也会很多
  4. 以上说的是编译Native模式的(这不算一点)
  5. 啊? 这…上面几点还不吗?(emmmmm…这也不算)
  1. 并不能直接复用现有的包, 需要进行适配(指的是Native模式), 其中最大原因是NativeImage编译期间会各种class进行裁剪, 用不到的全部去掉(不是你的孩子我不要…), 但是!!! 这样会产生一个问题, 那就是有些包中动态加载或者动态生成的类, 仅仅是静态分析的话编译器是不能充分将他们纳入NativeImage中的(宛若智障…)
  2. 编译NativeImage时间…很长…而且期间你的CPU内存散热风扇将发挥他们毕生所学…不过可以选择使用docker编译,限制一下CPU内存使用就可以防止系统卡死,但是换来的是编译时间更长…
  • 观点
    用还是不用,大家需要自己去权衡,我这里只是列出我所了解的优缺点,如果你认为缺点可以接受,优点又足够馋人,那就冲吧骚年

咋用?

  • 首先,安装GraalVM,下载对应操作系统的版本即可
  • 我系统用的Deepin Linux,按照文档可以很快安装完成,macOS可以试下,Win写代码还是可以的,NativeImage编译不建议尝试,我只编译成功过HelloWorld…不过可以在Win10 的WSL(最好是WSL2,Win10 2004以及之后的版本可以安装)里面编译运行
  • 基本上和配置JDK差不多,个JAVA_HOME,最多再用gu(GraalVM Updater)个NativeImage组件
  • 编译成NativeImage, 我准备水了这段(因为懒,不不不,文章后面会详细的…), 或者看下官方文档也是极好的, 如果打不开的话,那一定是你人品不行(科.学.上.网)
  • 只看Native Images这一节就行,示例是Hello Dad,暂时不要尝试编译别的,因为很可能编译不过…
  • 注意:系统环境变量有Node的秃子们注意下,GraalVM自带一个Node(包括NPM),但是版本比较旧,做大前端或者Node后端开发可能会遇到坑

代码时间

  1. 用idea(社区版本即可)创建个maven项目archetype用maven-archetype-quickstart (maven仓库访问不了或者太慢了,配置个镜像即可)
  2. 现在这个hello dad已经可以运行了(如果你想的话)
  3. 现在我们编译一下
    . 命令行(pom.xml目录下)
    mvn clean package
    
    . 或者IDEA(最好先clean一下)clean+package
  4. 现在target目录下应该有打包好的jar包了target
  5. 在命令行使用native-image命令编译(这个程序是安装graalvm时带的;在target目录执行)
    native-image -jar ./graalvm-aooo-1.0-SNAPSHOT.jar
    
    报错
    嗯…可以看出进展很"顺利"…
  6. 不要慌…在maven pom.xml插件加个配置,配置一下mainClass即可pom add mainClass
  7. 重复上述3,4,5步骤,这是步骤5的正确输出:Native-image
  8. 这时候target目录下已经生成了一个可执行程序(这个hello world 7M多…由于我在Linux下操作,所以可执行程序可以没有扩展名):exe
  9. 直接执行(target目录)./graalvm-aooo-1.0-SNAPSHOTresult

小结

  • 本章节内容只是让秃子们了解GraalVM是什么,有什么东西,大体有个了解
  • 嫌弃我唠叨的可以直接看粗体的文字,是不是说的有点晚…
  • graalvm在类unix系统下可以用sdkman安装(科.学.上.网)
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值