ОШИБКА JNI (ошибка приложения): переполнение глобальной справочной таблицы (макс = 51200) дамп глобальной справочной табJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 ОШИБКА JNI (ошибка приложения): переполнение глобальной справочной таблицы (макс = 51200) дамп глобальной справочной таб

Сообщение Anonymous »

Я пытаюсь получить объявленные методы класса, используя отражение в Java, но столкнулся с ошибкой. Вот фрагмент кода, который я использую:

Код: Выделить всё

let methods = clazz.class.getDeclaredMethods();
По сути, я понял, что это может быть вызвано утечкой памяти. Вызвав приведенную выше строку кода несколько раз в цикле, я со временем получаю следующую ошибку:

Код: Выделить всё

signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
Abort message: 'JNI ERROR (app bug): global reference table overflow (max=51200)global reference table dump:
Last 10 entries (of 51200):
51199: 0x151c6e58 java.lang.reflect.Method
51198: 0x151c6e30 java.lang.reflect.Method
51197: 0x151c6e08 java.lang.reflect.Method
51196: 0x151c6de0 java.lang.reflect.Method
[ . . . ]
1 of java.lang.reflect.Method[] (305 elements)
1 of java.lang.reflect.Method[] (357 elements)
1 of java.lang.reflect.Method[] (506 elements)
1 of dalvik.system.VMRuntime
1 of android.app.Application
1 of android.app.ActivityThread$ApplicationThread
1 of android.content.ContentProvider$Transport
1 of android.database.ContentObserver$Transport
1 of android.graphics.HardwareRenderer$ProcessInitializer$1
1 of android.hardware.display.DisplayManagerGlobal$DisplayManagerCallback
1 of android.hardware.input.InputManager$InputDevicesChangedListener
1 of android.os.PersistableBundle$1
1 of android.view.ViewRootImpl$W
1 of android.view.WindowManagerGlobal$1
1 of android.view.accessibility.AccessibilityManager$1
1 of android.view.inputmethod.InputMethodManager$1
1 of android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper
'
x0  0000000000000000  x1  0000000000003a60  x2  0000000000000006  x3  000000775495b1c0
x4  622d646c68736d74  x5  622d646c68736d74  x6  622d646c68736d74  x7  7f7f7f7f7f7f7f7f
x8  00000000000000f0  x9  032d8e3d57c95433  x10 0000000000000000  x11 ffffffc0fffffbdf
x12 0000000000000001  x13 0000000000000e11  x14 001ed617062d3e61  x15 000000000003ff50
x16 00000079f915ac80  x17 00000079f913c870  x18 0000000000000000  x19 0000000000003a48
x20 0000000000003a60  x21 00000000ffffffff  x22 000000000778420c  x23 000000000778420c
x24 0000007767eac000  x25 00000077678b3017  x26 00000079fcfb686c  x27 0000007767eae000
x28 0000007767eaf000  x29 000000775495b240
lr  00000079f90f02a0  sp  000000775495b1a0  pc  00000079f90f02cc  pst 0000000000000000
backtrace:
#00 pc 000000000004e2cc  /apex/com.android.runtime/lib64/bionic/libc.so!libc.so (offset 0x4e000) (abort+164) (BuildId: 95f68a34fdf7b31f42d3f811d5d88f58)
#01 pc 0000000000000108  
***
Для наглядности я использую Frida для оркестровки Java-приложения для Android. Но я думаю, что проблема не связана с Андроидом или Фридой, я думаю, что на методы отражения влияет утечка памяти. Похоже, что не существует метода очистки глобальной таблицы ссылок, поэтому в случае массового использования метода getDeclaredMethods() программа вылетает.
Есть ли здесь гуру Java, который мог бы помочь мне решить эту очень коварную проблему?
Большое спасибо!
Мне бы хотелось использовать getDeclaredMethods столько раз и чтобы не вызывались сбои, связанные с тем, что глобальная таблица смещений не очищается.


Подробнее здесь: https://stackoverflow.com/questions/790 ... -reference
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»