JNI練習-記憶體溢位
這部分內容主要是參考Android NDK開發(六)——使用開源LAME轉碼mp3.
我們參照原文,可以很方便的實現功能,但在測試的時候,發現在轉碼大檔案時,程式跑一段時間就會報錯: local reference table overflow (max=512)。這就引出了我們在JNI開發中會遇到的一個很常見的問題:記憶體洩漏。
具體說明就是在下面的方法呼叫過程中,沒有新增註釋掉的清理本地引用的程式碼。
關於JNI記憶體洩漏,可以參考這篇文章:jni 記憶體洩漏
/**
* 呼叫java程式碼 更新程式的進度條
*/
void publishJavaProgress(JNIEnv * env, jobject obj, jint progress) {
// 1.找到java的MainActivity的class
jclass clazz = (*env)->FindClass(env, "com/example/testndk/MainActivity");
if (clazz == 0) {
LOGI("can't find clazz");
}
LOGI(" find clazz");
//2 找到class 裡面的方法定義
jmethodID methodid = (*env)->GetMethodID(env, clazz, "setConvertProgress","(I)V");
if (methodid == 0) {
LOGI("can't find methodid");
}
LOGI(" find methodid");
//3 .呼叫方法
(*env)->CallVoidMethod(env, obj, methodid, progress);
/*
//去掉本地引用
if(methodid){
(*env)->DeleteLocalRef(env,methodid);
}
if(clazz){
(*env)->DeleteLocalRef(env,clazz);
}
*/
}
相關文章
- Java棧溢位|記憶體洩漏|記憶體溢位Java記憶體溢位
- 記憶體溢位記憶體溢位
- Java記憶體溢位Java記憶體溢位
- JBOSS記憶體溢位記憶體溢位
- 記憶體溢位:native溢位 和 上層溢位記憶體溢位
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- 記憶體洩漏和記憶體溢位記憶體溢位
- WebLogic: 記憶體溢位Web記憶體溢位
- java 程式記憶體溢位Java記憶體溢位
- 記憶體溢位問題記憶體溢位
- 記憶體溢位的分析記憶體溢位
- 基礎學習-記憶體溢位問題記憶體溢位
- 【記憶體洩漏和記憶體溢位】JavaScript之深入淺出理解記憶體洩漏和記憶體溢位記憶體溢位JavaScript
- JVM——記憶體洩漏與記憶體溢位JVM記憶體溢位
- 阿里大佬講解Java記憶體溢位示例(堆溢位、棧溢位)阿里Java記憶體溢位
- Android記憶體溢位分析Android記憶體溢位
- Java記憶體溢位情況Java記憶體溢位
- 記憶體溢位的問題記憶體溢位
- Flume記憶體溢位錯誤記憶體溢位
- JavaScript之記憶體溢位和記憶體洩漏JavaScript記憶體溢位
- JAVA記憶體區域與記憶體溢位異常Java記憶體溢位
- 記憶體洩漏與記憶體溢位神比較記憶體溢位
- [Java基礎]記憶體洩漏和記憶體溢位Java記憶體溢位
- return new物件造成溢位記憶體物件記憶體
- JVM記憶體溢位及合理配置JVM記憶體溢位
- 傳說中的記憶體溢位記憶體溢位
- 解決記憶體溢位九法記憶體溢位
- mybatis-plus getOne 記憶體溢位MyBatis記憶體溢位
- Java記憶體區域與記憶體溢位異常(JVM學習系列1)Java記憶體溢位JVM
- jvm記憶體設定及記憶體溢位、解決方案JVM記憶體溢位
- 【轉】java中的記憶體溢位和記憶體洩漏Java記憶體溢位
- 誰動了我的記憶體之 PHP 記憶體溢位PHP記憶體溢位
- java記憶體溢位和記憶體洩漏的區別Java記憶體溢位
- 誰動了我的記憶體之PHP記憶體溢位PHP記憶體溢位
- tomcat記憶體溢位問題記錄Tomcat記憶體溢位
- 關於 PHP 記憶體溢位的思考PHP記憶體溢位
- php記憶體溢位了怎麼辦?PHP記憶體溢位
- Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)RedisError記憶體溢位