返回信息流使用jni写了一个堆外的内存缓存,但是用jni的话如果出现空指针什么的整个进程都崩了,有没有方法可以像try-catch一样把这些异常都抓住。
这是一条镜像帖。来源:北邮人论坛 / java / #48421同步于 2016/3/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
有没有方法可以让使用jni的java程序不崩溃
nxlhero
2016/3/11镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
C语言里,空指针错误是“未定义行为”,也就是什么都可以发生,从什么都不发生到机器冒烟都可以。
一般来说,实践中,空指针错误会造成CPU的MMU报错,引发中断,被操作系统抓住。根据操作系统的不同,通知进程的方法也不一样。Linux会给进程发一个信号SIGSEGV。这个信号如果不处理,会杀死进程(就是“整个进程崩了”)。别的操作系统(比如Windows)有可能不使用信号。
如果你处理这个SIGSEGV信号,可以让进程不死。但是,你怎么让程序继续执行呢?信号处理的时候,操作系统给你的程序的信息是“当前的寄存器里的数值”。然后你可以在中断处理程序里把CPU状态调整到你认为合适的继续点。但需要汇编、ABI、 编译器的知识,而且不同平台(不同CPU、不同操作系统、不同编译器)恢复的方法不一样。
所以,总而言之,没有简单的方法可以像try-catch一样捕获C语言里的这种异常。
试一试jnative吧 jni很少用了
一般很少直接调用 都是通过协议远程通信
【 在 nxlhero 的大作中提到: 】
: 使用jni写了一个堆外的内存缓存,但是用jni的话如果出现空指针什么的整个进程都崩了,有没有方法可以像try-catch一样把这些异常都抓住。