java - Java 垃圾收集器会停止我从 JNI 调用创建的 POSIX 线程吗?

标签 java multithreading garbage-collection posix

我有一个时间紧迫的应用程序,需要按设定的时间表发送 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/

相关文章:

java - 将java对象树转换为二维表

java - 在ArrayBlockingQueue中,为什么将final成员字段复制到局部final变量中?

java - 当 Eden 未满时发生 Minor GC。当Eden未满时,会出现Minor GC的原因是什么?

c++ - C++中信息树的设计问题

java - Wildfly 10.1.0.FINAL 上的内存泄漏 (java.lang.ref.Finalizer/ActiveMQConnection)

java - 如何将 printStackTrace() 中的异常写入 Java 中的文本文件?

java - 如何指定我想要的 UTF-8 版本(在 Java 中)?

Python内存不足错误,多线程子目录递归

Java线程等待和通知

C#一次性题