android 视频预览硬解码异常 JNI ERROR (app bug): weak global reference table overflow (max=51200)

我在安卓app中,采用采用海康相机预览视频,采用硬解码,运行5分钟后,就报如下错误:
A/art: art/runtime/indirect_reference_table.cc:98] JNI ERROR (app bug): weak global reference table overflow (max=51200)

art/runtime/indirect_reference_table.cc:98] weak global reference table dump:

art/runtime/indirect_reference_table.cc:98]   Last 10 entries (of 51200):

art/runtime/indirect_reference_table.cc:98]     51199: 0x1319a220 java.lang.Thread

art/runtime/indirect_reference_table.cc:98]     51198: 0x1319a1c0 java.lang.Thread

art/runtime/indirect_reference_table.cc:98]     51197: 0x1319a160 java.lang.Thread

art/runtime/indirect_reference_table.cc:98]     51196: 0x1319a100 java.lang.Thread

art/runtime/indirect_reference_table.cc:98]     51195: 0x130f8fa0 java.lang.Thread

art/runtime/indirect_reference_table.cc:98]     51194: 0x130f8f40 java.lang.Thread

art/runtime/indirect_reference_table.cc:98]     51193: 0x130f8ee0 java.lang.Thread

art/runtime/indirect_reference_table.cc:98]     51192: 0x130f8e80 java.lang.Thread

art/runtime/indirect_reference_table.cc:98]     51191: 0x130f8e20 java.lang.Thread

art/runtime/indirect_reference_table.cc:98]     51190: 0x130f8dc0 java.lang.Thread

art/runtime/indirect_reference_table.cc:98]   Summary:

art/runtime/indirect_reference_table.cc:98]     cleared jweak (count=0)

art/runtime/indirect_reference_table.cc:98]         1 of java.lang.Thread

art/runtime/indirect_reference_table.cc:98]     cleared jweak (count=0)

art/runtime/indirect_reference_table.cc:98]         3 of android.media.MediaCodec (3 unique instances)

art/runtime/indirect_reference_table.cc:98]      4512 of java.lang.Class (4512 unique instances)

art/runtime/indirect_reference_table.cc:98]         1 of java.lang.ThreadGroup

art/runtime/indirect_reference_table.cc:98]       933 of java.lang.Thread (933 unique instances)

art/runtime/indirect_reference_table.cc:98] 

E/相机播放SDK:: inputData failed with: 11, i:0

E/相机播放SDK:: inputData failed with: 11, i:0

E/相机播放SDK:: inputData failed with: 11, i:0

E/相机播放SDK:: inputData failed with: 11, i:100

E/相机播放SDK:: inputData failed with: 11, i:100

E/相机播放SDK:: inputData failed with: 11, i:100

E/相机播放SDK:: inputData failed with: 11, i:200

E/相机播放SDK:: inputData failed with: 11, i:200

E/相机播放SDK:: inputData failed with: 11, i:200

E/相机播放SDK:: inputData failed with: 11, i:300

E/相机播放SDK:: inputData failed with: 11, i:300

E/相机播放SDK:: inputData failed with: 11, i:300

E/相机播放SDK:: inputData failed with: 11, i:400

E/相机播放SDK:: inputData failed with: 11, i:400

E/相机播放SDK:: inputData failed with: 11, i:400

E/相机播放SDK:: inputData failed with: 11, i:500

I/HCNetSDK: [2021-10-19 10:01:33.987][DBG] ID-IP-CHAN[0-192.168.1.66-1] [CGetStreamBase::DoExchange] recv timeout[2], m_bReConnecting[0], maxtimes[6]!

I/HCNetSDK: [2021-10-19 10:01:33.987][DBG] ID-IP-CHAN[1-192.168.1.64-1] [CGetStreamBase::DoExchange] recv timeout[2], m_bReConnecting[0], maxtimes[6]!

I/HCNetSDK: [2021-10-19 10:01:33.988][DBG] ID-IP-CHAN[2-192.168.1.65-1] [CGetStreamBase::DoExchange] recv timeout[2], m_bReConnecting[0], maxtimes[6]!

E/art: Unexpected time out during dump checkpoint.

A/art: art/runtime/barrier.cc:89] Check failed: !count_ Attempted to destroy barrier with non zero count

A/art: art/runtime/runtime.cc:298] Runtime aborting --- recursively, so no thread-specific detail!

art/runtime/runtime.cc:298] 

A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 8063 (Thread-46930)

硬解码部分代码,显示视频直接采用的surfaceview

private void processRealData(int iPlayViewNo, int iDataType, byte[] pDataBuffer, int iDataSize, int iStreamMode) {
        if (HCNetSDK.NET_DVR_SYSHEAD == iDataType) {
            if (m_iPort >= 0) {
                return;
            }
            m_iPort = Player.getInstance().getPort();
            if (m_iPort == -1) {
                Log.e(TAG, "getPort is failed with: " + Player.getInstance().getLastError(m_iPort));
                return;
            }
            Log.i(TAG, "getPort succ with: " + m_iPort);
            if (iDataSize > 0) {
                if (!Player.getInstance().setStreamOpenMode(m_iPort, iStreamMode)) //set stream mode
                {
                    Log.e(TAG, "setStreamOpenMode failed");
                    return;
                }
                if (!Player.getInstance().openStream(m_iPort, pDataBuffer, iDataSize, 4 * 1024 * 1024)) //open stream
                {
                    Log.e(TAG, "openStream failed");
                    return;
                }

                if(bCheckHD)
                {
                    Player.getInstance().setHardDecode(m_iPort, 1);
                }

                while (!m_bSurfaceCreated) {
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    Log.i(TAG, "wait 100 for surface, handle:" + iPlayViewNo);
                }

                if (!Player.getInstance().play(m_iPort, getHolder())) {
                    Log.e(TAG, "play failed,error:" + Player.getInstance().getLastError(m_iPort));
                    return;
                }
            }
        } else {
         
            for (int i = 0; i < 2000; i++) {
                if (!Player.getInstance().inputData(m_iPort, pDataBuffer, iDataSize)) {
                    Log.e(TAG, "inputData failed with: " + Player.getInstance().getLastError(m_iPort));
                } else {
                    break;
                }
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

请问报错为jni 弱引用表溢出,要怎么解决呢?

很明显是内存泄露,排查内存泄露
for (int i = 0; i < 2000; i++) {
}为啥要做两千次

如果解码失败什么都不做会有问题么?