根据 JNI 文档,当您保留 JVM 管理的某些内存时,GetStringCritical()
会禁用垃圾收集。如果您在调用 ReleaseStringCritical()
之前调用 Java 层或执行阻塞操作,则使用此函数而不是 GetString()
会使您的 native 面临死锁风险。那么 Critical 函数有什么好处?如果它是同义的,那么在访问 JVM 托管内存时禁用垃圾收集?
最佳答案
首先进行更正:根据规范,GetXxxCritical()
方法可能禁用垃圾收集。
So what's the benefit of the Critical function,
使用 GetXxxCritical()
方法的优点是它们更有可能返回指向原始数据的指针而不是数据的副本。这意味着它们可能会更快。当然,这是以记录的限制/警告为代价的。
... and is it synonymous with disabling garbage collection while you access JVM managed memory?
嗯,不;看我的更正。这些方法可能禁用垃圾收集,也可能不。这将取决于您的平台如何实现 JNI 接口(interface),还可能取决于其他因素,例如 JVM 垃圾收集器选项。
关于Java JNI - GetString() 与 GetStringCritical() 相比有何优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3191621/