Да, JVM просто завершит работу, что является одной из причин, по которой код JNI действительно трудно отлаживать. Если вы используете код C ++, вы можете использовать исключения, а затем отобразить их в исключение Java, которое, по крайней мере, обеспечивает определенный уровень безопасности, но не помогает при таких вещах, как плохой доступ к памяти и т. Д.
С архитектурной точки зрения я предлагаю максимально отделить ваш код от JNI. Создайте структуру класса / процедуры, которая полностью тестируема из C ++ / C, и пусть код JNI выполняет только все преобразования. Если после этого произойдет сбой JVM, вы, по крайней мере, будете знать, где искать.