Судя по звукам, вы (фактически) выделяете большой массив в стеке потока Java (при вызове метода C), и это вызывает переполнение стека.Я полагаю, что это обнаруживается, когда возвращается вызов JNI.В любом случае, это было бы «невосстановимо», потому что запись за пределы стека могла бы растоптать все, что появляется в памяти дальше.Перед лицом возможного повреждения памяти у JVM нет другого выбора, кроме как выручить.
Если этот диагноз верен, то решение состоит в том, чтобы не размещать большие структуры данных в стеке!Выделите их, используя malloc
вместо этого ... и не для того, чтобы освободить их, иначе у вас будет утечка памяти собственного кода для отслеживания.
Рассматривали ли вы переписывание кода C вДжава?Это потенциально позволит избежать большой боли.