It is likely an implementation detail, but for the Oracle and IBM JDKs at least is the compiled pattern cached or do we as application developers need to perform the caching
It doesn't. If you have performance sensitive areas, you might want to hold your pattern objects as member variables.
Clojure does this more or less automatically when you have a regex in a function though.