jni
jni copied to clipboard
代码中存在多处内存泄露,排查了一个月终于定位到问题
代码中存在多处内存泄露,排查了一个月终于定位到问题 1.关于数组操作,cgo内存模型有误,修复如下
func (env Env) GetStringUTF(ptr Jstring) string {
jstr := C.jstring(ptr)
size := C.GetStringUTFLength((*C.JNIEnv)(unsafe.Pointer(env)), jstr)
if size == 0 {
return ""
}
ret := make([]byte, int(size)+1)
C.GetStringUTFRegion((*C.JNIEnv)(unsafe.Pointer(env)), jstr, C.jsize(0), C.GetStringLength((*C.JNIEnv)(unsafe.Pointer(env)), jstr), cmem(ret))
return string(ret)
}
类似这种错误有多处,这是导致崩溃和jvm异常的根本原因