在生产代码中使用 JNA 的 Native.setProtected
Using JNA's Native.setProtected in production code
我看到 JNA Crash protection 功能描述以 "It is not uncommon when defining a new library and writing tests to encounter memory access errors which crash the VM" 开头。这向我表明,这种崩溃保护实际上是为了调试/开发的早期阶段而设计的。在生产中保留它是否安全,或者是否存在我应该注意的大量性能成本/其他原因将其关闭?
对于 Windows,它在默认情况下处于打开状态并且保持这种状态是安全的,因为它使用结构化异常处理来捕获错误(您仍然应该尝试正常关闭,因为不能保证捕获到的错误错误无论如何都是可以恢复的)。
对于使用信号处理来捕获错误的平台,您应该不在生产中使用它,因为 VM 本身使用那些相同的信号。在开发中,您通常需要使用 jsig
库,以便 JNA 能够在不干扰 JVM 的情况下正确捕获信号(反之亦然),并且您不太可能在生产中执行此操作。
没有性能成本,更多的是可靠性问题。
我看到 JNA Crash protection 功能描述以 "It is not uncommon when defining a new library and writing tests to encounter memory access errors which crash the VM" 开头。这向我表明,这种崩溃保护实际上是为了调试/开发的早期阶段而设计的。在生产中保留它是否安全,或者是否存在我应该注意的大量性能成本/其他原因将其关闭?
对于 Windows,它在默认情况下处于打开状态并且保持这种状态是安全的,因为它使用结构化异常处理来捕获错误(您仍然应该尝试正常关闭,因为不能保证捕获到的错误错误无论如何都是可以恢复的)。
对于使用信号处理来捕获错误的平台,您应该不在生产中使用它,因为 VM 本身使用那些相同的信号。在开发中,您通常需要使用 jsig
库,以便 JNA 能够在不干扰 JVM 的情况下正确捕获信号(反之亦然),并且您不太可能在生产中执行此操作。
没有性能成本,更多的是可靠性问题。