1. 程式人生 > >NDK ReferenceTable overflow (max=512) 問題

NDK ReferenceTable overflow (max=512) 問題

JNI層開發會遇到ReferenceTable overflow問題,特別是當jni函式被反覆呼叫上千上萬次的時候,現彙總如下

對於FindClass 返回的一定需要呼叫DeleteLocalRef,還有如下型別的變數需要DeleteLocalRef:

.FindClass /NewString/ NewStringUTF/NewObject/ GetObjectField等產生的都是LocalRef

總體原則:釋放所有對object的引用。

1.FindClass

jclass ref= (env)->FindClass("java/lang/String");

env->DeleteLocalRef(ref); 

2.NewString/ NewStringUTF/NewObject/NewByteArray

jstring     (*NewString)(JNIEnv*, const jchar*, jsize);    

const jchar* (*GetStringChars)(JNIEnv*, jstring, jboolean*);     

void        (*ReleaseStringChars)(JNIEnv*, jstring, const jchar*);
jstring     (*NewStringUTF)(JNIEnv*, const char*);    

const char* (*GetStringUTFChars)(JNIEnv*, jstring, jboolean*);     

void        (*ReleaseStringUTFChars)(JNIEnv*, jstring, const char*);
env->DeleteLocalRef(ref);

3.GetObjectField/GetObjectClass/GetObjectArrayElement

jclass ref = env->GetObjectClass(robj);

env->DeleteLocalRef(ref); 

4.GetByteArrayElements

jbyte* array= (*env)->GetByteArrayElements(env,jarray,&isCopy);

(*env)->ReleaseByteArrayElements(env,jarray,array,0);

5.const char* input =(*env)->GetStringUTFChars(env,jinput, &isCopy);

(*env)->ReleaseStringUTFChars(env,jinput,input);

6.NewGlobalRef/DeleteGlobalRef

 jobject     (*NewGlobalRef)(JNIEnv*, jobject);     

void        (*DeleteGlobalRef)(JNIEnv*, jobject);

例如,

jobject ref= env->NewGlobalRef(customObj);

env->DeleteGlobalRef(customObj);

相關推薦

NDK ReferenceTable overflow (max=512) 問題

JNI層開發會遇到ReferenceTable overflow問題,特別是當jni函式被反覆呼叫上千上萬次的時候,現彙總如下 對於FindClass 返回的一定需要呼叫DeleteLocalRef,還有如下型別的變數需要DeleteLocalRef: .FindClas

mixare的measureText方法在頻繁調用時拋出“referencetable overflow max 1024”的解決方式

def ken post zygote 內存泄露 oot col idt stack 這幾天在搞基於位置的AR應用,採用了github上兩款開源項目: mixare android-argument-reality-framework 這兩個項目實現機制大致同

jni 記憶體洩露 local reference table overflow (max=512)

01-02 00:02:35.064: E/dalvikvm(4223): JNI ERROR (app bug): local reference table overflow (max=512) 向JNI傳遞大量的資料,或new出大量物件時,如果不及時釋放,則會造成上述

Android JNI呼叫OpenCV,長時間執行記憶體異常,導致閃退的log分析和解決---(ReferenceTable overflow (max=1024)造成的)

首先交代下問題背景,前些日子自己在android上搞了個入侵檢測玩。就是camera當作監控裝置,每隔一定時間檢測是否有東西入侵,如果入侵率到一定程度就報警的東西。最近發現,每次執行超過20分鐘,app直接掛掉消失。下面附上核心完整log:01-01 21:17:42.321

JNI使用過程中出現的ReferenceTable overflow問題

工作中,在使用JNI的過程中,出現程式執行崩潰的問題,通過LOG看是出現了ReferenceTable overflow問題,抓取的部分LOG如下: W/dalvikvm( 6450): ReferenceTable overflow (max=1024)

ReferenceTable overflow 問題彙總

JNI層coding經常會遇到ReferenceTable overflow問題,特別是當jni函式被反覆呼叫上千上萬次的時候,現彙總如下,未完待續,並歡迎補充,(*^__^*) 嘻嘻…… 總體原則:釋放所有對object的引用 1.FindClass  例如, jclass ref= (env)->

杭電1024----Max Sum Plus Plus

int oid max art main 杭電 sca ava 最大 1 /* 2 這題還沒有理解透徹。某個dalao也不寫註釋。只能自己理解了。。。 3 先求為i個元素(1<=i<=M)為一個區間的最大和,保證元素個數大於等於i個,遞推到M個即可 4

Hadoop實戰-MapReduce之max、min、avg統計(六)

next combine output fileinput private pub eof pri use 1、數據準備: Mike,35 Steven,40 Ken,28 Cindy,32 2、預期結果 Max  40 Min   28 Avg 33 3、M

Android JNI和NDK學習(09)--JNI實例二 傳遞類對象

get state 回調 obj utf 說明 called [] code 1 應用層代碼 NdkParam.java是JNI函數的調用類,它的代碼如下: package com.skywang.ndk; import android.app.Activity;

第十六周 項目三-max帶來的沖突

watermark html mes name 實例化 定義函數 項目 names nbsp 分析以下程序出現的編譯錯誤,給出解決的方案。 #include<iostream> using namespace std; //定義函數模板 template&l

Android NDK 環境搭建

pad str 還要 ndk路徑 不出 tar evel 例如 command 使用最新ndk,直接拋棄cygwin,曾經做Android的項目要用到NDK就必需要下載NDK,下載安裝Cygwin(模擬Linux環境用的),下載CDT(Eclipse C/C++開發插件

java - Scanner vs InputStreamReader - Stack Overflow

tab rpn sid container show all tin address doc Scanner vs InputStreamReader Ask Question up vote

[leetcode-485-Max Consecutive Ones]

tput pla this ati exce cto return its plan Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: I

Android NDK JNI WARNING: illegal start byte 0x

返回 內容 char jni 我們 現象 byte illegal war 今天攻克了JNI WARNING: illegal start byte 0x81這個問題。 問題出現的現象是通過jni調用加密方法,調用之後返回密文內容,結果就出現這個問題。 在國外查找一

C++之Binary Heap/Max Heap

right pac col log parent this success ren ins 1 #include <iostream> 2 #include <time.h> 3 #include <random> 4

Android NDK 開發總結

設置 .text nbsp def runt 編寫 abi 文件的 targe 一.安裝配置環境 1.安裝Android Studio,下載路徑https://developer.android.com/studio/index.html?hl=zh-cn。我下載的是Win

分配粒度和內存頁面大小(x86處理器平臺的分配粒度是64K,內存頁是4K,所以section都是0x1000對齊,硬盤扇區大小是512字節,所以PE文件默認文件對齊是0x200)

tail details lpad 硬件 512字節 地址 系統 pad 原因 分配粒度和內存頁面大小x86處理器平臺的分配粒度是64K,32位CPU的內存頁面大小是4K,64位是8K,保留內存地址空間總是要和分配粒度對齊。一個分配粒度裏包含16個內存頁面。這是個概念,具體

JNI/NDK開發指南(2)

清除 onu 呼叫 rac 個人理解 運行 ati clas 函數 1.生成動態庫.so,存放於手機的system/lib/中(APP怎樣將.so存入該文件夾,奇怪?????),Java層調用JNI的類會運行靜態代碼System.loadLibrary("***")將手

Android jni/ndk編程三:native訪問java

efi pan exp exc save protect uil arm 註冊方法 一.訪問靜態字段 Java層的field和method,不管它是public,還是package、private和protected,從 JNI都可以訪問到,Java面向語言的封裝性不見了。

解決ios手機頁面overflow scroll滑動很卡的問題

沒有 repo 發現 container rep jpg bug head 上下 解決ios手機頁面overflow scroll滑動很卡的問題 今天在IOS系統上測試 webAPPApp的時候發現使用了position:fixed/absolute時,DIV