GraalVM:允许外部脚本访问本地编译对象

时间:2019-03-01 13:19:53

标签: java groovy compilation graalvm

我正在创建一个Java / groovy应用程序,该应用程序也支持通过groovy编写脚本。有很多用Groovy编写的遗留Java代码和新部分。除此之外,该应用还可以使用groovy编写脚本。

我可以像过去一样使所有内容在VM下运行并混淆jar中的符号-没问题。但是:

我正在评估使用GraalVM创建本机二进制文件的问题,但是问题是,它在运行时如何与运行外部groovy脚本兼容? graal是否保留有关类和方法的符号信息,以及如何处理从脚本到本机的方法调用的数据交换?我不确定这是否还能奏效。

从过去的类似项目中,我知道在大多数情况下,本机编译会剥离任何符号的二进制文件。我还需要此功能来代替混淆。计划是保留某些方法和对象的符号,这些方法和对象仅允许外部groovy脚本访问。

说明:这特别涉及GroovyScriptEngine和CroovyClassLoader。 here第1.3和1.4节。

与groovy VM相比,GraalVM编译的groovy的内存模型如何? 如果我在运行时加载一个类,并将从本机端创建的对象foo传递给它,该脚本是否可以正常工作,并且能够正常使用成员甚至反射foo?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

@Boris是正确的,groovy在所有脚本运行时编译内部使用java类加载器。没有JVM,Graal的本机/底物VM版本将无法运行新生成的JVM Butecode。