一个调用第三方 so 库的程序,内存总是随着运行时间暴涨,dump 下来的 java heap 并不大,于是怀疑是 native heap 出现了内存泄漏。。
之后程序加上了定时 gc,情况只是稍微好转,native heap 的内存依旧持续增长。。。
请问下面哪些情况需要主动释放内存来避免 native heap 的内存泄漏呢?
//1 jna 回调 中的 pointer 或者结构体
public interface cb extends Callback {
public void invoke(LLong lAttachHandle, Pointer pstGrayInfo, Pointer dwUser);
}
//pstGrayInfo 需要主动释放么?
//2 函数写入的出参结构体
boolean foo(Structure outparam);
//outparam 及其中包裹的结构体需要主动释放么?
//3 发现一些结构体中包含其他结构体,这个成员变量却不需要初始化就能正常使用
public static class A extends Structure {
public B b;
}
public static class B extends Structure{
public int a;
}
这里 A 中的成员变量 b 不需要初始化,这个 b 需要手动释放么?