graalvm初探

graalvm是普通JDK的增强版,支持AOT特性,可将jar包转成本地可执行文件,提升启动时间,减少内存占用。同时还支持多语言融合编程,支持python/ruby/js等语言。

安装

到oracle官网下载graalvm21,对应jdk21。旧有的jdk21程序无需修改,可直接跑在graalvm上。

转成本地可执行文件要使用native-image工具,windows下需提前安装visual studio2022 build tools,这个链接可下载:

https://visualstudio.microsoft.com/zh-hans/downloads/

下载时勾选“C++桌面开发”这一个组件即可。

安装好visual studio2022 build tools,重启机器。

最后使用:

native-image -jar your-jar-file

就能把打包的jar转成exe,直接执行exe好了。

转成的exe大小比原始jar小很多,且无需依赖java虚拟机了。

多语言融合编程

python

代码调用样例:

import org.graalvm.polyglot.Context;

try (Context ctx = Context.newBuilder(PYTHON_LAN)
            .allowAllAccess(true)
                          .option("python.PythonPath", "src/main/resources/python")
            .build()) {
            ctx.eval(PYTHON_LAN, "import myscript; myscript.run()");
        }

通过Context类,在java里调用python脚本。有点像普通jdk里的ScriptEngine。
注意:这里的allowAllAccess是不能省略的,因为polyglot引擎访问特定目录是需要权限的。

pom依赖:

<dependencies>
        <dependency>
            <groupId>org.graalvm.polyglot</groupId>
            <artifactId>polyglot</artifactId>
            <version>24.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.graalvm.polyglot</groupId>
            <artifactId>python</artifactId>
            <version>24.2.1</version>
            <type>pom</type>
        </dependency>

graalpy的venv创建(也是通过maven插件):

<build>
        <plugins>
            <plugin>
                <groupId>org.graalvm.python</groupId>
                <artifactId>graalpy-maven-plugin</artifactId>
                <version>24.2.1</version>
                <configuration>
                    <!-- packages类似requirements.txt里的内容  -->
                    <packages> <!-- ① -->
                        <package>PyYAML==6.0.2</package>
                    </packages>
                    <externalDirectory> <!-- ② -->
                        ${project.basedir}/python-resources
                    </externalDirectory>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>process-graalpy-resources</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

特别说明的是,graalpy的pip跟普通python的pip共用一套配置,也就是.pip/pip.conf(windows下是pip/pip.ini文件)。下载的过程中,可能会去找三方包的graalpy补丁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值