Closed dreamlike-ocean closed 7 months ago
进度更新 目前支持自动配置运行时初始化的类,啊,这里是指的这个当前这个库对应的初始化 提供
@Override
public void duringSetup(DuringSetupAccess access) {
//getpid
NativeImageHelper.initPanamaFeature(StdLib.class);
}
这种方式帮助搞定Feature
1,目前使用Feature提供Panama api注册,该方案不变 2,对于反射,通过提供配置文件和Feature里面强制初始化某些类完成本库的适配,对于编译期生成的绑定则是通过apt生成配置文件完成 3,目前还存在一个问题,bytebuddy中依赖的字节码生成的proxy,这里可以通过predefined class功能支持,这个功能原理在于native模型下劫持define方法计算byte[]摘要再读取预先放置的classdata文件,这里存在一个问题我目前放置的prefined class是jdk21的字节码,如果运行时生成的不为jdk21就会使得字节码中的classversion改变生成数据的摘要,进而启动失败
尝试固定bytebuddy生成的proxy的java字节码版本到jdk5 这一就可以直接将prefined classes打包进文件参与graal构建,这做到了graalvm版本无关性且能保证native和jvm一致性,进而不需要用户重跑java agent生成 https://github.com/raphw/byte-buddy/pull/1586
目前进度https://github.com/dreamlike-ocean/PanamaUring/commit/c24131467d86a6c295895431786e80e8905a1217 选择是覆盖对应类的实现 如果对应pr可以合入直接使用新版本即可,目前先使用覆盖的方式吧
目前进度 首先对于生成器修改了LambdaMetaFactory和invokeDynamic的策略,通过系统变量
native-mode
控制 修改类似于已经成功native-image,但是存在大量的手动成分,一次构建需要如下指令
目前来看注入字节码这一步可以支持自动化,其他看起来无法省略 这里还有个问题是PanamaFeature的自动化,这个也很麻烦