Comments (5)
目前进度 首先对于生成器修改了LambdaMetaFactory和invokeDynamic的策略,通过系统变量native-mode
控制
修改类似于
MethodHandle methodHandle = MethodHandles.lookup().findConstructor(aClass, MethodType.methodType(void.class));
if (use_lmf) {
return NativeGeneratorHelper.ctorBinder(methodHandle);
}
return () -> {
var mh = methodHandle.asType(methodHandle.type().changeReturnType(Object.class));
try {
return (Object) mh.invokeExact();
} catch (Throwable t) {
t.printStackTrace();
}
return null;
};
已经成功native-image,但是存在大量的手动成分,一次构建需要如下指令
- mvn clean package -am -pl graal-native-example 生成fat-jar
- java -agentlib:native-image-agent=config-output-dir=./graal-native-example/src/main/resources/META-INF/nat
ive-image,experimental-class-define-support 生成反射文件和预定义文件 - mvn clean package -am -pl graal-native-example 再次打包将上一步的文件打进去
- jar -uf ../graal-native-example/target/graal-native-example-fat.jar 。。。 将第二步生成的代理对应的字节码注入jar
- native-image --features=top.dreamlike.PanamaFeature --enable-native-access=ALL-UNNAMED --no-fallback --enable-preview -O3 --gc=G1 -march=native --initialize
-at-build-time=top.dreamlike.panama.genertor.proxy.NativeCallGenerator -jar graal-native-example/target/graal-native-example-fat.jar 正式打包native-image
目前来看注入字节码这一步可以支持自动化,其他看起来无法省略
这里还有个问题是PanamaFeature的自动化,这个也很麻烦
from panamauring.
进度更新 目前支持自动配置运行时初始化的类,啊,这里是指的这个当前这个库对应的初始化
提供
@Override
public void duringSetup(DuringSetupAccess access) {
//getpid
NativeImageHelper.initPanamaFeature(StdLib.class);
}
这种方式帮助搞定Feature
from panamauring.
1,目前使用Feature提供Panama api注册,该方案不变
2,对于反射,通过提供配置文件和Feature里面强制初始化某些类完成本库的适配,对于编译期生成的绑定则是通过apt生成配置文件完成
3,目前还存在一个问题,bytebuddy中依赖的字节码生成的proxy,这里可以通过predefined class功能支持,这个功能原理在于native模型下劫持define方法计算byte[]摘要再读取预先放置的classdata文件,这里存在一个问题我目前放置的prefined class是jdk21的字节码,如果运行时生成的不为jdk21就会使得字节码中的classversion改变生成数据的摘要,进而启动失败
from panamauring.
尝试固定bytebuddy生成的proxy的java字节码版本到jdk5 这一就可以直接将prefined classes打包进文件参与graal构建,这做到了graalvm版本无关性且能保证native和jvm一致性,进而不需要用户重跑java agent生成
raphw/byte-buddy#1586
from panamauring.
目前进度c241314
选择是覆盖对应类的实现 如果对应pr可以合入直接使用新版本即可,目前先使用覆盖的方式吧
from panamauring.
Related Issues (20)
- AsyncServerSocket multi shot accept接口实现问题 HOT 1
- jdk20新ffi api更改的适配
- 更少的拷贝
- io_uring异常唤醒
- 抛弃生成的代码 进行瘦身
- 使用SmallRye Mutiny改造全部的异步接口 and jdk21适配 and 应用瘦身 HOT 6
- 缺少对应的c头文件,方便用jexract去生成abi HOT 2
- ring_message支持
- io_uring_prep_splice
- C abi ffi生成器适配 HOT 5
- Struct 生成器支持NativeArray类 HOT 1
- native call 返回指针时错误取值问题 HOT 1
- invokedynamic惰性初始化对应的native call生成 HOT 1
- jdk22适配-生成器适配 HOT 1
- jdk22适配-PanamaUring适配 HOT 1
- 字符串模板相关代码回滚
- 移除mutiny依赖 HOT 1
- 柔性数组支持
- 提供尽可能简单且扩展好的EpollEventLoop实现
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from panamauring.