![]() |
1
6
JNI的书对这种情况有一点简短,但是如果你研究的足够久,你可以弄清楚。基本上,当您将本机C线程附加到JVM时,您将创建一个本地上下文,它可以存储一些本地引用。 这些本地参考将 从未 释放,直到使用deleteLocalRef手动释放它们,或者通过调用DetachThread销毁本地上下文。由于您可能不需要对JVM进行大量的附加和分离,因此在上调用DeleteLocalRef非常重要。 每一个 您创建的本地引用。 自然的下一个问题是,“如果本地引用在JVM分离之前不被GC处理,为什么还要创建全局引用?”本地引用不能在线程之间共享。所以您仍然需要创建全局引用来实现这一点。 |
![]() |
2
1
我认为创建JVM的线程变成Java线程,它和Java中创建的任何线程一样,或者通过AutoCurrutthTHEAD()连接,它有本地堆栈框架。因此,您创建的任何对象都将成为此堆栈帧中的本地引用,当您销毁JVM(不能分离主线程)或调用DeleteLocalRef()时,该堆栈帧将过期。 |
![]() |
3
1
可能调用detachcurrenthread()也会释放引用。 不幸的是,JNI规范没有明确定义调用API的引用行为,实际的语义可能取决于特定的JVM实现:s |
![]() |
Kris · 有没有办法获得可变结构字段的“引用” 3 年前 |
![]() |
Jora Karyan · IF语句未按预期引发错误 3 年前 |
![]() |
nedzad · 如何访问引用Firebase中其他对象的对象 7 年前 |
![]() |
Empha · 从成员函数对对象所做的更改不会持续。范围/参考问题? 7 年前 |