繁体   English   中英

从 JNI 线程调用 fork 时 Java 堆会发生什么

[英]What happens to Java heap when fork is called from JNI thread

从 JNI 线程调用fork()时 Java 堆会发生什么。 Java 堆是否重复?

本机内存部分、JNI 内存、类内存、线程内存和线程本地堆 (TLH) 会发生什么?

调用fork() ,作为子进程的 JVM 将无法工作。 根据fork()上的 POSIX 文档

进程应使用单个线程创建。 如果多线程进程调用fork() ,则新进程应包含调用线程及其整个地址空间的副本,可能包括互斥锁和其他资源的状态。 因此,为了避免错误,子进程可能只执行异步信号安全操作,直到调用exec函数之一。

JVM 是一个多线程进程,JNI 调用和 Java 函数不是 POSIX 异步信号安全函数调用。

有关 POSIX 要求异步信号安全的函数调用列表,请参阅2.4 信号概念

那么,Java 堆和其他特定于 JVM 的内存会发生什么? 它们通常通过copy-on-write复制到子进程的虚拟地址空间中,但是如果您尝试在子进程中继续 JVM 执行,它们实际上是不可用的。 例如,它们处于未知状态,锁定可能由不存在的线程持有。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM