当前位置: 首页 > news >正文

韶关企业网站建设广告制作费用清单明细

韶关企业网站建设,广告制作费用清单明细,网站建设论文模板,国外网站赏析本博客所有文章除特别声明外#xff0c;均采用CC BY-NC-SA 4.0许可协议。转载请注明来自 唯你 使用场景 JAVA 与 Rust 互操作让 Rust 可以背靠 Java 大生态来做更多事情#xff0c;而 Java 也可以享受 Rust 语言特性的内存安全#xff0c;所有权机制#xff0c;无畏并发。… 本博客所有文章除特别声明外均采用CC BY-NC-SA 4.0许可协议。转载请注明来自 唯你 使用场景 JAVA 与 Rust 互操作让 Rust 可以背靠 Java 大生态来做更多事情而 Java 也可以享受 Rust 语言特性的内存安全所有权机制无畏并发。 互操作的典型场景包括 性能优化利用 Rust 处理计算密集型任务提高 Java 应用的整体性能。系统级编程结合 Rust 的底层控制能力与 Java 的高级抽象实现更高效的系统交互。跨平台开发使用 Rust 编写核心逻辑通过 JNI 在不同平台上与 Java 交互实现高效跨平台开发。安全关键应用在金融、医疗等领域利用 Rust 处理敏感数据和核心功能保证高度安全性。实时系统在游戏引擎、音频处理等延迟敏感的应用中使用 Rust 处理时间关键部分。 背景知识 JNI 全称 Java Native Interface它允许 Java 代码与其他语言如 C 或 C编写的应用程序进行互操作。JNI Specification这是 JNI 的官方规范详细描述了 JNI 的使用方法、接口和功能。 Java 虚拟机JVM JNI 是 Java 虚拟机的一部分JVM 在启动时为每个线程创建一个 JNI 环境。JNI 环境包括指向 JVM 内部数据结构的指针这些数据结构用于存储 Java 对象、方法和字段的信息。 JNIEnv (JNI 环境) JNIEnv是一个指向结构体的指针代表当前线程的 JNI 环境。它包含所有 JNI 相关函数的指针让你能在本地代码中使用这些函数。每个线程都有自己独立的JNIEnv所以不能在不同线程间传递这个指针。可以将JNIEnv视为一个翻译器。当 Rust 代码需要与 Java 交互时它通过这个翻译器发送请求当调用 Java 方法或获取 Java 对象的属性。每个线程都拥有自己独立的翻译器这确保了各线程与 Java 交互时的独立性。 另外 当 Java 代码调用本地方法时JVM 会加载相应的本地库并创建一个JNIEnv指针。本地代码可以使用这个指针访问 JNI 提供的函数进行 Java 对象的操作。每个线程有独立JNIEnv保证线程安全。新线程需调用AttachCurrentThread获取对应JNIEnv。JNI 提供了数据类型转换机制实现 Java 与 C/C之间的数据传递。 在 Rust 生态中使用 jni 0.21.1 库可以实现与 Java 代码的交互。 JNI 0.21.1 简介 该项目为 Rust 提供了完整的 JNI 绑定允许 使用 Rust 代码与 Java 库进行交互调用 Java 方法和访问 Java 对象。 从 Rust 代码中使用 Java 类和接口。 实现跨语言的高效数据交换。 利用 Rust 的性能优势和 Java 的成熟生态系统 跨平台 UI 框架 Flutter 源码中的 MethodChannel 实现了 Dart 与 Android 层的通信其底层 C也是通过 JNI 调用插件中的 onMethodCall 来实现的。这与上述 jni 0.21.1 采用了相同的思路但存在以下不同点 语言特性和类型安全 Rust 的jni库提供了一种更安全的方式来处理 Java 对象和方法调用。它利用 Rust 的所有权系统来减少潜在的内存错误使得在 Rust 中使用 JNI 时更易于管理资源和避免常见错误。多平台支持jni 0.21.1 提供了更广泛的跨平台支持。 如何运行示例 示例源码请阅读原文见原文底部源码获取 在 Windows 11 环境下运行示例时笔者遇到了两个问题 Windows 自带的 PowerShell 无法直接执行 Makefile由于 Rust 配置了特定目标平台出现了不明原因的编译错误 以下是解决这些问题的方法 在 MinGW-w64 中执行 Makefile 确保已在 MinGW-w64 环境中安装 mingw32-make 工具通常随 MinGW-w64 一起安装打开 MinGW-w64 命令行导航至 Makefile 所在目录执行以下命令 //当前示例中是makefile直接执行mingw32-make -f makefile即可 mingw32-make -f YourMakefileName确认当前 Rust 环境 举例来说笔者在 C:\Users\xxx.cargo 目录下配置了 config.toml 文件 [build] target aarch64-linux-android这导致在 Windows 上使用 mingw32-make 来编译针对 Android 平台的 Rust .so 文件造成了混乱并引发了莫名其妙的编译错误。解决方法是删除不必要的 config.toml 文件确保当前运行环境与目标平台如 Windows一致。。 输出结果 Hello, josh! [B2f92e0f4 factCallback: res 720 counterCallback: count 1 counterCallback: count 2 counterCallback: count 3 counterCallback: count 4 counterCallback: count 5 Invoking asyncComputation (thread id 1) asyncCallback: thread id 23, progress 0% asyncCallback: thread id 23, progress 10% asyncCallback: thread id 23, progress 20% asyncCallback: thread id 23, progress 30% asyncCallback: thread id 23, progress 40% asyncCallback: thread id 23, progress 50% asyncCallback: thread id 23, progress 60% asyncCallback: thread id 23, progress 70% asyncCallback: thread id 23, progress 80% asyncCallback: thread id 23, progress 90% asyncCallback: thread id 23, progress 100%示例简析 让我们深入分析示例中 asyncComputation 的流程。其核心目的是在 Rust 端执行一个异步计算同时 Rust 端会调用 Java 端来报告计算进度。 整体流程图说明 Java 的 main()方法调用 asyncComputation()。asyncComputation()通过 JNI 调用 Rust 的 Java_HelloWorld_asyncComputation()函数。Rust 函数创建一个新线程来执行异步计算。在新线程中Rust 执行计算并周期性地调用 Java 的 asyncCallback()方法报告进度。当 Rust 完成计算后控制权返回到 Java 的主线程。 这个过程展示了 Java 调用 Rust步骤 1和 Rust 回调 Java步骤 4的双向交互。 源码如下 #1 将一个 HelloWorld 类实例传递给 Rust 端这对应下方 Rust 侧实现中 #3 处的 callback 对象 Rust 实现说明 JNIEnv 参数详见上述相关概念中的解释。JClass代表调用此本地方法的 Java 类引用主要用于访问类级别的静态方法和字段。callbackJava 中新创建的 HelloWorld 对象实例。获取 JVM 对象因为 env 对象不支持线程间传递和共享仅实现了 Send而 JVM 支持。通过 JVM 对象可在线程间传递并最终获得 env。创建全局引用获取 HelloWorld() 实例对象的全局引用防止被垃圾回收。线程安全每个线程都有自己的 JNIEnv确保线程安全。在新线程中需调用 AttachCurrentThread 获取对应的 JNIEnv。反向调用 Java通过 env 反向调用 Java 代码。调用对象是新创建的 HelloWorld 实例回调方法是其中的 asyncCallback。在 JNI 中(I)V 是方法签名描述了 Java 方法的参数和返回类型。(I)V 表示接受一个整数参数并返回 void 的方法。在这里asyncCallback 方法接收一个整数progress作为参数无返回值。 总结 Java 与 Rust 互操作让两种语言优势互补提高性能和安全性适用于多种场景如性能优化、系统级编程和跨平台开发。JNIJava Native Interface是实现 Java 与 Rust 互操作的关键技术允许 Java 代码与其他语言编写的应用程序进行交互。通过示例分析我们了解了 Java 调用 Rust 函数和 Rust 回调 Java 方法的双向交互过程展示了两种语言之间的无缝协作。 参考链接 https://github.com/jni-rs/jni-rs JNI APIs and Developer Guides Leveraging Rust in our high-performance Java database
http://www.hkea.cn/news/14454571/

相关文章:

  • 怎么做wap网站吉林省网站建设公司
  • 在线做3d交互的网站唐山如何做百度的网站
  • 做境外的网站网站违法么网站建设工作简介
  • 网站收录提交入口网址岳阳建设网站哪家好
  • 珠海网站建设q479185700棒乐高编程培训
  • 网站制作的详情表设计培训机构
  • 网站换服务器网络运营工程师
  • 富阳网站建设公司推荐ps制作网站效果图
  • 建设部网站白蚁文件最近国家新闻
  • 品牌学习网站宁德网络推广
  • 傻瓜式网站建设软件有哪些罗湖附近公司做网站建设多少钱
  • 网站放到iis如何做指向陕西省中小学教师培训网站
  • 福清做网站html5单页网站模板
  • 免网站域名注册网络营销方案包括哪些内容
  • 我想建设网站php网站开发怎么接私活
  • 做网站怎么接单北京海淀工商局网站
  • linux建设一个网站做动效很好的网站
  • 贵州国龙翔建设有限公司网站商城微网站如何做
  • 徐州徐州网站建设建设银行网站解除绑定
  • 怎么做网站文件网站建设的方案计划
  • 网站代运营网站导航页面制作
  • 吴桥做网站网站建设优化河南
  • 上饶做网站哪家好建网站方案书
  • 软文网站平台资源网站免费的
  • 青岛网景互联网站建设公司手机模板网站模板下载网站有哪些内容
  • 抢注qq空间专属域名网站h5网站模板源码
  • 网站开发需要研究什么app开发公司找xiala5徵推广
  • 政务网站建设模块构建新引擎激发新动力
  • wordpress怎么上传网站营销网站建设案例
  • 廊坊高端品牌网站建设wordpress标签3d