¿Necesita GC "Stop The World" para Minor GC o solo para Full GC? Según tengo entendido, se producirá un GC menor cuando no haya espacio disponible en EDEN para asignar un objeto, ¿eso significa que para cada GC menor habrá un evento STW?
La respuesta es, depende".
Con la mayoría de los coleccionistas de Java modernos, una colección menor (espacio joven / Eden) es de hecho una colección que detiene el mundo. Esta no es una consecuencia lógica directa de que los GC menores sean activados por un espacio joven que se está llenando. (Otras estrategias son posibles para desencadenar un GC menor, o para lidiar con un espacio joven que se está llenando). Más bien, es solo ... la forma en que se implementan la mayoría de los GC de Java.
Una excepción es ZGC, que no es generacional. Por lo tanto, no existe tal cosa como una colección menor. En cambio, cuando se activa el GC, se detiene brevemente (menos de 10 ms) el evento mundial mientras se encuentran las raíces del GC. Una segunda excepción es el Shenandoah GC, que tampoco es generacional.
(Y, por supuesto, el Java 1.1 GC original era un colector de barrido de marcas, no generacional y que detiene el mundo).
Después de leer varios libros, descubrí que un GC menor siempre es un evento Stop The World, que detendrá todos los subprocesos de la aplicación y normalmente tendrá una duración breve, a diferencia de una pausa de GC para Full GC, que llevará mucho más tiempo. porque se ejecutará tanto en las generaciones jóvenes como en las antiguas. Así que tanto Minor GC como Full GC siempre son eventos Stop the World.