El JVM (al menos hotspot) tiene un concepto similar al "GIL", es mucho más fino en su granularidad de bloqueo, la mayor parte proviene de los GC en el hotspot, que son más avanzados.
En CPython es un gran candado (probablemente no es tan cierto, pero es lo suficientemente bueno como argumento), en la JVM está más extendido con diferentes conceptos dependiendo de dónde se use.
Eche un vistazo a, por ejemplo, vm / runtime / safepoint.hpp en el código de punto de acceso, que es efectivamente una barrera. Una vez en un punto seguro, toda la VM se ha detenido con respecto al código de Java, al igual que la VM de Python se detiene en el GIL.
En el mundo de Java, tales eventos de pausa de VM se conocen como "detener el mundo", en estos puntos solo el código nativo que está vinculado a ciertos criterios se ejecuta libremente, el resto de la VM se ha detenido.
Además, la falta de un bloqueo grueso en Java hace que JNI sea mucho más difícil de escribir, ya que JVM ofrece menos garantías sobre su entorno para llamadas FFI, una de las cosas que cpython hace bastante fácil (aunque no tan fácil como usar ctypes).