- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我正在使用 JNI 调用一些返回 String
的 Java 方法。 , 一世。 e. jstring
在 native 代码中:
jstring jStr = (jstring)env->CallStaticObjectMethod(myApplicationClass, getString);
env->DeleteLocalRef(jStr)
吗? ?我想我知道,但我在 JNI 引用中找不到任何说明如此的具体说明,而且我可以看到我有很多代码没有调用它 - 尝试过的真实代码。但是如果有轻微的内存泄漏,没有人会注意到,因为这段代码不会创建很多对象。
最佳答案
当您的 JNI 调用函数返回到 Java 时,您创建的每个本地引用都会自动释放。
JNI specification outlines two cases您可能想要使用的地方 DeleteLocalRef
:
A native method accesses a large Java object, thereby creating a local reference to the Java object. The native method then performs additional computation before returning to the caller. The local reference to the large Java object will prevent the object from being garbage collected, even if the object is no longer used in the remainder of the computation.
A native method creates a large number of local references, although not all of them are used at the same time. Since the VM needs a certain amount of space to keep track of a local reference, creating too many local references may cause the system to run out of memory. For example, a native method loops through a large array of objects, retrieves the elements as local references, and operates on one element at each iteration. After each iteration, the programmer no longer needs the local reference to the array element.
关于java-native-interface - 我是否需要 DeleteLocalRef 由 JNI 调用返回的 jstring 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56931787/
问题一: jstring jstrKey; for(int i=1;iNewString((jchar *)strKey, wcslen(strKey)); } env->DeleteLocalRef
这是示例 jni 方法,我在其中创建了一个字符串并将其返回给调用 java 方法: jstring Java_com_example_hellojni_HelloJni_stringFromJNI(
我正在尝试使用 JNI 开发 Android 应用程序。我有一个将数组作为输入的方法(jfloatArray featurePoints): jfloat* flt1 = env->GetFloatA
正如我们所知,在 C/C++ 拥有的线程中创建 Java 对象,我们负责根据需要调用 DeleteLocalRef 或 Push/Pop LocalFrame。 我有一些代码,比如 jbyteArra
当我运行代码时,我得到一个错误“添加到 JNI 本地引用表失败有 512 个条目” 这是我的代码: jstring pJNIData = pJNIEnv->NewStringUTF ( variabl
我已经在世界各地搜索过,知道如果它是在 JNI 代码中创建的,我们应该 DeleteLocalRef 那么,如果对象是新的并由 Java 代码返回,我是否也应该删除它?如: // in java co
我知道 NewStringUTF 创建了一个本地引用,但我似乎无法在网上找到令人信服的来源来说明 CallStaticObjectMethod 等。是否需要对这些进行 DeleteLocalRef 处
在 JNI 中,我通过调用 SetObjectArrayElement() 插入一个在 JNI 代码中本地创建的 java 对象来构造一个大数组。 我的问题是,在使用 SetObjectArrayEl
我从 JNI 方法返回一个 jstring。我在返回值之前删除了对它的本地引用。 JNIEXPORT jstring JNICALL TestJNIMethod( JNIEnv* env, jclas
在 JNI 中,jbyteArray 是否被视为作业对象?即:如果我有一些长时间运行的 C++ 代码,我可以使用像下面这样的代码来释放对象引用吗? JNIEnv* env; jobject getJa
假设我正在使用 JNI 调用一些返回 String 的 Java 方法。 , 一世。 e. jstring在 native 代码中: jstring jStr = (jstring)env->Call
我是一名优秀的程序员,十分优秀!