В garbage-collected языке, GC попытается отработать до выкидывания исключения, и после уже будет сделан stack unrolling. Да, скорее всего какие-то объекты будут доступны для сборки начиная с этого момента, но для этого GC их должен сначала обнаружить (а для этого надо, чтоб он случился опять, что может быть после того, как ошибка поймана). Притом, те объекты что будут освобождены могут никак не помочь, если новые объекты не будут помещаться на их место (фрагментация). Ну и, самое главное, если у нас программа многопоточная, встают интересные вопросы: в какие потоки кидать oom (только в один? во все сразу?), и как их обрабатывать в коде, так чтоб не получить race condition.
no subject