String replaceAll () vs. Matcher replaceAll () (Diferencias de rendimiento)

Pregunta bastante simple, pero esto proviene de una persona de C / C ++ que se adentra en las complejidades de Java.

Entiendo que puedo iniciar jUnit y algunas pruebas de rendimiento propias para obtener una respuesta; pero me pregunto si esto está ahí fuera.

¿Hay diferencias conocidas entre String.replaceAll () y Matcher.replaceAll () (en un objeto Matcher creado a partir de un Regex.Pattern) en términos de rendimiento?

Además, ¿cuáles son las diferencias de la API de alto nivel entre ambas? (Inmutabilidad, manejo de NULLs, manejo de cuerdas vacías, hacer café, etc.)

Respuestas a la pregunta(7)

Su respuesta a la pregunta