You can catch any Throwable, so that includes Exceptions, RuntimeExceptions and Errors.
You catch an OutOfMemoryException (OOME), but the exception handler will most likely throw another OOME.
The OOME is only thrown when the JVM really runs out of memory. If the JVM needs more memory, it will always first run the Garbage Collector to see if it can free up some more memory. Only if afterwards there still isn't enough free memory the OOME will be thrown.