亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

jni ReferenceTable overflow

發布時間:2020-06-22 17:24:55 來源:網絡 閱讀:6702 作者:Sunny貍貍 欄目:開發技術

頻繁點擊一個按鈕,程序崩潰,查看log部分詳情如下:

04-11 11:10:40.371: W/dalvikvm(5507): ReferenceTable overflow (max=1024)
04-11 11:10:40.371: W/dalvikvm(5507): JNI pinned array reference table (0x6242b008) dump:
04-11 11:10:40.371: W/dalvikvm(5507):   Last 10 entries (of 1024):
04-11 11:10:40.371: W/dalvikvm(5507):      1023: 0x42e97298 int[] (456 elements)
04-11 11:10:40.371: W/dalvikvm(5507):      1022: 0x41c16618 int[] (69 elements)
04-11 11:10:40.371: W/dalvikvm(5507):      1021: 0x42e5ef28 byte[] (1280 elements)
04-11 11:10:40.371: W/dalvikvm(5507):      1020: 0x4230da28 byte[] (119 elements)
04-11 11:10:40.371: W/dalvikvm(5507):      1019: 0x422a03f0 byte[] (14 elements)
04-11 11:10:40.371: W/dalvikvm(5507):      1018: 0x42efced0 byte[] (1920 elements)
04-11 11:10:40.371: W/dalvikvm(5507):      1017: 0x422bc570 byte[] (119 elements)
04-11 11:10:40.371: W/dalvikvm(5507):      1016: 0x41f52e68 byte[] (14 elements)
04-11 11:10:40.371: W/dalvikvm(5507):      1015: 0x423c41d0 byte[] (119 elements)
04-11 11:10:40.371: W/dalvikvm(5507):      1014: 0x422b8bf0 byte[] (14 elements)
04-11 11:10:40.371: W/dalvikvm(5507):   Summary:
04-11 11:10:40.371: W/dalvikvm(5507):        20 of byte[] (12 elements) (20 unique instances)
04-11 11:10:40.371: W/dalvikvm(5507):         1 of byte[] (13 elements)
04-11 11:10:40.371: W/dalvikvm(5507):       489 of byte[] (14 elements) (489 unique instances)
04-11 11:10:40.371: W/dalvikvm(5507):         1 of byte[] (68 elements)
04-11 11:10:40.371: W/dalvikvm(5507):         3 of byte[] (69 elements) (3 unique instances)
04-11 11:10:40.371: W/dalvikvm(5507):       486 of byte[] (119 elements) (486 unique instances)
04-11 11:10:40.371: W/dalvikvm(5507):        10 of byte[] (148 elements) (10 unique instances)
04-11 11:10:40.371: W/dalvikvm(5507):        10 of byte[] (152 elements) (10 unique instances)
04-11 11:10:40.371: W/dalvikvm(5507):         1 of byte[] (1280 elements)
04-11 11:10:40.371: W/dalvikvm(5507):         1 of byte[] (1920 elements)
04-11 11:10:40.371: W/dalvikvm(5507):         1 of int[] (69 elements)
04-11 11:10:40.371: W/dalvikvm(5507):         1 of int[] (456 elements)
04-11 11:10:40.371: E/dalvikvm(5507): Failed adding to JNI pinned array ref table (1024 entries)
04-11 11:10:40.371: I/dalvikvm(5507): "main" prio=5 tid=1 RUNNABLE


主要問題是ReferenceTable overflow 。查看資料,發現是引用計數器溢出了,最大為1024.即java的內存管理機制是基于引用的,需要計數器來記錄引用的次數。在overflow這句話下面dump出了最近的10個引用,Summary下面可以看出有哪些引用。可以發現其中有兩組byte[],每組的引用達到480多次。我恍然大悟,每點擊一次按鈕,引用一次,下次點擊時上次的資源未被釋放。于是一直累加直至計數器溢出。

 檢查代碼發現:

int nArrLen_u = env->GetArrayLength(jbUrl);
    if(nArrLen_u > 0){

        pUrl = (char *)malloc(nArrLen_u + 1);
        bzero(pUrl, (nArrLen_u + 1));
        jU = env->GetByteArrayElements(jbUrl, NULL);
        memcpy(pUrl, jU, nArrLen_u);
    }

    int nArrLen_x = env->GetArrayLength(jbXml);
    if(nArrLen_x > 0){

        pXmlBuf = (char *)malloc(nArrLen_x + 1);
        bzero(pXmlBuf, (nArrLen_x + 1));
        jX = env->GetByteArrayElements(jbXml, NULL);
        memcpy(pXmlBuf, jX, nArrLen_x);
    }


代碼上可以看出我調用了兩次 GetByteArrayElements 但是卻沒有釋放掉。所以在最后添上釋放語句就解決了~


if(nArrLen_u > 0){
        env->ReleaseByteArrayElements(jbUrl,jU,0);
    }
    if(nArrLen_x > 0){
        env->ReleaseByteArrayElements(jbXml,jX,0);
    }

參考Android NDK之JNI陷阱 在用到NewByteArray類似方法時一定要DeleteLocalRef(),使用GetByteArrayElements時 要用ReleaseByteArrayElements來進行釋放。

問題就是答案!真正明白是什么問題之后,也就找到了答案。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

九寨沟县| 金沙县| 洛南县| 攀枝花市| 台东县| 平远县| 东宁县| 六枝特区| 丰都县| 东明县| 沧源| 东城区| 门源| 阿克苏市| 讷河市| 绥中县| 和平区| 永定县| 民勤县| 体育| 西贡区| 南开区| 广东省| 霸州市| 张北县| 浦北县| 紫阳县| 剑河县| 邵阳市| 页游| 永修县| 平度市| 宜黄县| 屯昌县| 清涧县| 延吉市| 樟树市| 互助| 安阳市| 讷河市| 鄱阳县|