与GCHandle等效的内存代码。Java中的Alloc()?
我正在使用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中固定对象内存
# 1 楼答案
Java的GC不知道为对象分配的本机内存。如果要在将来的某个时候删除内存,则必须在Java代码中通过调用对象分配建议的任何“free”方法来显式地删除内存
如果需要确保Java不会对给定的Java对象进行GC,那么需要确保存在对它的引用,直到不再需要它为止(最简单的方法是将其存储在静态(类)变量中)