我正在使用JNA将C DLL库封装到Java。该库提供了一个C#包装器。在C#wrapper的构造函数中,创建了一个对象,并且该对象的内存由
固定this.m_object = _CreateObject();
this.m_objectGCH = GCHandle.Alloc(this.m_object, GCHandleType.Pinned);
m_object是指向创建对象的整数,对象的内存由GCHandle.Alloc()固定。我可以创建一个对象并通过JNA获取指向该对象的指针。但是,我不知道用Java固定对象内存。
答案 0 :(得分:0)
Java的GC不知道为您的对象分配的本机内存。如果您负责在将来删除内存,则必须通过调用对象分配建议的“免费”方法在Java代码中明确地执行此操作。
如果您需要确保Java不是GC给定的 Java 对象,那么您需要确保在不再需要它之前有对它的引用(最简单的方法是将它存储在静态(类)变量中。