有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从go或java程序调用c有什么危险?

这可以通过标准机制(例如java的JNI)实现。如果c库中出现错误,会发生什么?说一个分段错误。这会使包含进程崩溃吗

相比之下,从go程序调用go-lib似乎更安全(或者从java程序调用java-lib)。lib可以抛出异常,但容器可以继续。当然,像OutOfMemory这样的事情可能会打乱整个过程,但至少很清楚发生了什么


共 (1) 个答案

  1. # 1 楼答案

    Say a segmentation fault. Will that crash the containing process?

    在这方面,从C调用的C和从Java调用的C之间没有太大区别。如果未经处理,SIGSEGV将使进程崩溃;否则,它将执行处理程序所做的任何操作。但一般来说,通过忽略关键故障从随机程序行为中恢复是不明智的;您的地址空间可能处于某种奇怪的状态,您没有编写代码来处理

    通过JNI调用C的真正问题是,C会以Java中设计不可能的方式损坏Java结构(比如JVM堆)。而且,直到一段时间之后,腐败才会出现,这导致调试过程中的挫折感