Вы обнаруживаете общее исключение, в то время как OutOfMemoryError является ошибкой, которая также является Throwable.
Что вы получили
java.lang.Object
↳ java.lang.Throwable
↳ java.lang.Error
↳ java.lang.VirtualMachineError
↳ java.lang.OutOfMemoryError
Что вы можете поймать
java.lang.Object
↳ java.lang.Throwable
↳ java.lang.Exception
Итак, чтобы поймать все возможные Throwables, вам нужно поймать
try {
//...
} catch (Throwable e) {
e.printStackTrace();
}