Для обработки необработанных исключений вы можете предоставить новую ThreadGroup, которая обеспечивает реализацию ThreadGroup.uncaughtException (...). Затем вы можете перехватить любые необработанные исключения и обработать их соответствующим образом (например, отправить домой журнал сбоев).
Я не могу помочь вам на стороне JNI, возможно, есть способ использовать исполняемый файл родной оболочки перед вызовом JVM, но этот исполняемый файл должен знать обо всех возможных JVM, которые он может вызывать, и как сбои и места размещения журналов сбоев и т. д.