Java JNI: распределение/разбиение памяти
При использовании JNI использует ли двоичный код JNI свою собственную память или использует часть памяти, выделенную для JVM?
Подробнее
Когда вы указываете -Xmx1024m
как параметр JVM, JVM выделяет все 1024 Мб памяти на объекты Java?
Использует ли она часть этого для объектов Java и часть этого для двоичного кода JNI, или же двоичный код JNI должен использовать память в дополнение к этой сумме? Как JVM выделяет/разделяет/управляет памятью в этом сценарии?
Похожие вопросы:
Ограничение распределения памяти Java
Ответы
Ответ 1
Как я обнаружил из первых рук, когда у нас была утечка памяти в каком-то коде JNI, двоичный код JNI использует свою собственную память в процессе JVM вне любого пространства кучи JVM. Мы видели, что Linux действительно убивает JVM, потому что JVM в целом превышает 3 ГБ виртуальной памяти. Но мы использовали -Xmx384m
и использовали только около 40 МБ того, что на стороне объектов Java, что в значительной степени доказывает, что JNI использует память за пределами пространства кучи JVM.