![]() |
1
17
当你叫新的…函数中,创建一个“本地引用”——在本地堆栈框架中引用该对象。这样就可以防止Java VM在您需要的时候从这个对象中获取GC。如果您正在实现某个本机方法,这很好——它的本地框架只为方法调用持续时间创建。但是,当您从原生Java附加线程创建对象时,它会绑定到这个线程堆栈框架,该线程堆栈框架将仅用该线程销毁。 所以,当您处理完一个对象后,您可以调用deleteLocalRef()来告诉您不再需要它。或者,您可以用pushlocalframe()/poplocalframe()对整个add()函数进行包围,以在其持续时间内形成单独的本地帧。 |
![]() |
2
4
函数releaseBytearrayElements和releaseStringutfChars的目的不是删除对象,而是在使用getBytearrayElements或getStringutfChars获取指针后将其解锁。 应删除这两个if语句。 |
![]() |
3
0
是的,我遇到了同样的问题。 我的Java应用程序通过JNI调用C++应用程序,C++应用程序将启动一个新线程,并调用一个Java方法。在新的线程中,创建了许多对象,并且内存增长很快,尽管我使用了deleteLocalRef、pushLocalFrame和popLocalFram。 我发现许多由newObject方法创建的对象无法释放。真奇怪。 |
![]() |
4
0
你们都说,我试过了。 在创建任何JString之后,必须使用deleteLocalRef方法,不能再使用。 newxxx或callstaticObjectMethod可能会创建JString,所有的JString都必须删除。 |
![]() |
payloc91 · 存储地图中的条目是否安全?它会导致内存泄漏吗? 7 年前 |
![]() |
pjj · 如果GC'ed是弱可达对象,那么为什么会出现OOM错误 7 年前 |
![]() |
K.R. · RxJava行为主体和使用者-这里是否存在内存泄漏? 7 年前 |
![]() |
eaglefreeman · 意外的R内存管理行为 7 年前 |
![]() |
areify · 如何避免此代码中的内存泄漏? 7 年前 |