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.