gpt4 book ai didi

java - 与 Java 中的 GCHandle.Alloc() 等效的代码?

转载 作者:行者123 更新时间:2023-12-01 15:47:47 25 4
gpt4 key购买 nike

我正在使用 JNA 将 C DLL 库包装到 Java。该库提供了一个 C# 包装器。在C#包装器的构造函数中,创建了一个对象,并通过

this.m_object = _CreateObject();
this.m_objectGCH = GCHandle.Alloc(this.m_object, GCHandleType.Pinned);

m_object是一个整数,指向创建的对象,该对象的内存由GCHandle.Alloc()固定。我可以创建一个对象并通过 JNA 获取指向该对象的指针。但是,我不知道在 Java 中固定对象内存。

最佳答案

Java 的 GC 不知道为对象分配的 native 内存。如果您负责在将来的某个时刻删除内存,则必须通过调用对象分配推荐的任何“free”方法在 Java 代码中明确执行此操作。

如果您需要确保 Java 不会 GC 给定的 Java 对象,那么您需要确保存在对它的引用,直到您不再需要它为止(最简单的方法是通过将其存储在静态(类)变量中)。

关于java - 与 Java 中的 GCHandle.Alloc() 等效的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6785412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com