我有一个时间紧迫的应用程序,需要按设定的时间表发送 UDP 数据报。接收端对抖动的容忍度非常低。用 java ScheduledThreadPoolExecutor 实现它是不够的,因为当 GC 执行“停止世界”收集时,我的线程暂停,而 GC 执行它的工作。
我想在 Java 中实现业务逻辑,同时在 C++ 中使用 POSIX 线程实现时间关键部分(顺便说一句, native 环境是 Linux)。这将使我们能够节省数千行用 Java 编写的代码,并从 native 系统调用中获得我们需要的节奏。
我的问题是:如果我调用创建单独 POSIX 线程的 JNI 函数,当 Java GC 执行“停止世界”收集时,该线程是否会“暂停”?经验丰富的 JNI 大师是否想指出这种方法或任何其他建议的方法存在的缺陷?
一如既往,感谢出色的堆栈溢出社区!
最佳答案
My question is this: If I call a JNI function that creates a separate POSIX thread will that thread be "paused" when the Java GC does a "Stop the World" collection?
不会有任何影响。 STW 影响需要到达安全点的 java 线程。进入 native 代码的 Java 线程也不会受到影响。
关于java - Java 垃圾收集器会停止我从 JNI 调用创建的 POSIX 线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5679018/