关于后端:JDK21更新内容ForeignFunctionAndMemoryApi

10次阅读

共计 2585 个字符,预计需要花费 7 分钟才能阅读完成。

有的时候博客内容会有变动,首发博客是最新的,其余博客地址可能会未同步, 认准https://blog.zysicyj.top

首发博客地址

文章更新打算

文章更新打算


| 442: | Foreign Function & Memory API (Third Preview) |

1. 什么是 Foreign Function & Memory API (Third Preview)?

Foreign Function & Memory API 是 Java 平台的一个性能,它容许开发者间接与本地代码进行交互,并且能够在 Java 中操作本地内存。这个性能最后在
JDK 14 的时候以 JEP 383 的模式引入了第一次预览版,而后在 JDK 15 中进一步改良并公布了第二次预览版(JEP 393),当初在 JDK 21
中公布了第三次预览版(JEP 442)。

2. 为什么须要 Foreign Function & Memory API?

Foreign Function & Memory API 的呈现次要是为了解决以下几个问题:

  • 与本地代码的无缝集成:有些场景下,咱们可能须要调用本地库或者零碎级别的函数,例如应用硬件加速、调用底层操作系统的特定性能等。而
    Foreign Function & Memory API 能够使得 Java 程序可能间接调用本地函数,从而实现与本地代码的无缝集成。
  • 进步性能:通过间接操作本地内存,能够防止数据拷贝和类型转换带来的性能损耗,从而进步程序的执行效率。
  • 扩大现有 Java 库的性能:Foreign Function & Memory API 提供了一种机制,能够将本地库中的函数包装成 Java 接口,从而不便地扩大现有的
    Java 库的性能。

3. Foreign Function & Memory API 的实现原理

Foreign Function & Memory API 的实现次要依赖于以下几个关键技术:

  • JNI(Java Native Interface):JNI 是 Java 平台提供的一种机制,用于在 Java 程序中调用本地代码。Foreign Function & Memory
    API 利用 JNI 提供的能力,使得 Java 程序能够间接调用本地函数。
  • 内存治理:Foreign Function & Memory API 容许开发者间接操作本地内存,包含调配、开释和读写等操作。这须要对内存进行无效的治理,以确保安全性和可靠性。
  • 类型映射 :因为 Java 和本地代码应用不同的数据类型示意数据,因而须要进行类型映射。Foreign Function & Memory API
    提供了一套规定和工具,用于将 Java 类型与本地类型进行转换。

4. Foreign Function & Memory API 的长处

  • 无缝集成:Foreign Function & Memory API 能够使得 Java 程序可能间接调用本地函数,从而实现与本地代码的无缝集成。
  • 高性能:通过间接操作本地内存,防止了数据拷贝和类型转换带来的性能损耗,从而进步程序的执行效率。
  • 灵活性:Foreign Function & Memory API 提供了丰盛的性能和灵便的接口,能够满足不同场景下的需要。

5. Foreign Function & Memory API 的毛病

  • 安全性危险:间接操作本地内存可能会带来一些平安危险,例如内存透露、拜访非法内存等。因而,在应用 Foreign Function &
    Memory API 时须要审慎解决,并遵循相干的平安标准。
  • 复杂性:Foreign Function & Memory API 波及到与本地代码的交互和内存治理等简单的问题,对开发者的要求较高,须要具备肯定的底层编程常识和教训。

6. Foreign Function & Memory API 的应用示例

以下是一个简略的示例,展现了如何应用 Foreign Function & Memory API 调用本地函数:

import jdk.incubator.foreign.*;

public class NativeFunctionExample {public static void main(String[] args) throws Exception {try (MemorySegment segment = MemorySegment.allocateNative(4)) {CLinker linker = CLinker.getInstance();
            FunctionDescriptor descriptor = FunctionDescriptor.of(CLinker.C_INT, CLinker.C_POINTER);
            LibraryLookup lookup = LibraryLookup.ofDefault();
            Symbol symbol = lookup.lookup("printf");
            FunctionHandle handle = linker.downcallHandle(symbol, descriptor);
            
            String message = "Hello, World!";
            MemoryAccess.setCString(segment.baseAddress(), message);
            int result = (int) handle.invokeExact(segment.baseAddress());
            
            System.out.println("Result:" + result);
        }
    }
}

上述示例中,咱们应用 Foreign Function & Memory API 调用了本地的 printf 函数,并将后果打印进去。

7. Foreign Function & Memory API 的应用注意事项

  • 在应用 Foreign Function & Memory API 时,须要确保本地函数和库曾经正确装置并可用。
  • 对于间接操作本地内存的状况,须要特地留神内存治理和安全性问题,避免出现内存透露、拜访非法内存等问题。
  • 应用 Foreign Function & Memory API 须要审慎解决异样,以确保程序的稳定性和可靠性。

8. 总结

Foreign Function & Memory API 是 Java 平台提供的一种机制,能够使得 Java 程序可能间接调用本地函数,并且能够在 Java
中操作本地内存。它通过 JNI 技术实现与本地代码的无缝集成,并提供了高性能和灵活性。然而,在应用 Foreign Function & Memory API
时须要留神安全性和复杂性等问题,以确保程序的稳定性和可靠性。
<!– md tj.md –>

本文由 mdnice 多平台公布

正文完
 0