有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

与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) 个答案

  1. # 1 楼答案

    Java的GC不知道为对象分配的本机内存。如果要在将来的某个时候删除内存,则必须在Java代码中通过调用对象分配建议的任何“free”方法来显式地删除内存

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