2011-07-22 53 views
0

我正在使用JNA将C DLL库转包为Java。该库提供了一个C#包装器。在C#包装的构造,将创建一个对象,并且该对象的存储器被等效代码到Java中的GCHandle.Alloc()?

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

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

+0

java中没有直接的等价物。如果您提供更多的上下文(即,您如何/为什么要尝试使用JNA对象),那么我们可能会提出解决方法。 – 2011-07-22 06:59:04

回答

0

Java的GC没有意识到为您的对象分配了本地内存。如果您有责任在将来某处删除内存,则必须通过调用对象分配建议的任何“空闲”方法在Java代码中明确执行此操作。

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