在生产代码中使用 JNA 的 Native.setProtected



我看到JNA崩溃保护功能描述以"在定义新库和编写测试时遇到内存访问错误导致VM崩溃的情况并不少见"开头。在我看来,这种崩溃保护实际上是为调试/开发的早期阶段设计的。在生产中让它开着是否安全,或者是否存在我应该意识到的巨大性能成本/关闭它的其他原因?

对于Windows,默认情况下它是打开的,并且保持这种状态是安全的,因为它使用结构化异常处理来捕获错误(您仍然应该尝试优雅地关闭,因为无法保证捕获的错误以任何方式可恢复)。

对于使用信号处理来捕获错误的平台,您可能不应该在生产环境中使用,因为VM本身使用相同的信号。在开发中,您通常需要使用jsig库,以便JNA能够在不干扰JVM的情况下正确捕获信号(反之亦然),并且您不太可能在生产中做到这一点。

没有性能成本,更多的是可靠性问题。

最新更新