开发者社区> 问答> 正文

JNI与Safepoint怎么进行协作?

JNI与Safepoint怎么进行协作?

展开
收起
1358896759097293 2021-05-04 15:27:47 774 0
1 条回答
写回答
取消 提交回答
  • 45271990@qq.com

    首先要知道Java的信任状态,Java最主要信任状态是“Thread in Java”状态,这个状态里面在执行一个解释器或者已经编译的方法,纯Java执行。这时候如果发生Safepoint,会通过Interpreter机制把这个线程直接挂起,暂停下来,然后去Safepoint里面进行GC的各种操作。 在Java里面,调用JNI进入Native,会切换到Thread in native状态,这里执行Native函数,在执行的时候跟GC可以并行执行,因为理论上要么执行,要么通过JNI和JNI交互,所有的跟JNI相关的数据结构都可以被管理。然后Native还可以去切换到JVM状态,这是非常关键的状态,这个状态不能发生GC,不用关心。 JNI与Safepoint交互,假如JNI执行时发生Safepoint能并行。JNI执行的时候返回Java,这时候会被阻塞,需要检查状态,卡在Safepoint状态,直到Safepoint结束,继续回到Java。

    27.png

    2021-05-05 22:55:07
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载