Java JNI - GetString() 与 GetStringCritical() 相比有何优势?

标签 java java-native-interface

根据 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/

相关文章:

java - 更改默认短信应用 Intent 不适用于 Android 10

android - 在 Java-Android 和 JNI 之间发送/接收音频数组

java - JNI 方法帮助。带有目标偏移量的 Memcpy

使用有效指针从 C 调用方法后出现 Java JNI NullPointerException

java - 混合模式下的 jstack : WrongTypeException: No suitable match for type of address

java - 如何使用参数映射和构建器实例化对象?

java - 子类对象需要类型转换为子类才能访问子类方法

java - 线程优先级没有影响

c++ - Jni 不工作

java-native-interface - java JNI 错误 java.lang.UnsatisfiedLinkError :