Как ограничить функцию (по времени и памяти)?
Могу подсказать насчет первого пункта.
Запустить функцию отдельным потоком и при выполнение каждой операции проверятьThread t = new Thread.... {

if (Thread.interrupted()) {
// сохранить текущий результат и выйти из метода
}
});;

t.start();

t.join(10000); // ждем поток 10 сек

t.interrupt(); // предлагаем потоку прервать выполнение
1) Можно навелосипедить на потоках, аля Eugene, можно использовать готовое аля Sirikid.
2) Делаем свой менеджер ресурсов, который ограничивает число созданных массивов. Из минусов - придётся использовать этот менеджер, что ни разу не удобно (разбухает код), да и без натива довольно сложно будет контролировать память. Но теоретически - возможно.
3) Зачем это нужно - остаётся открытым. Если не уверены, что задача будет выполнена вовремя, значит вы плохой программист. Если уверены, что задача не будет выполнена вовремя, значит требуется искать другое решение. В том числе потенциальный отказ от Java, которая сама по себе жрёт лишние ресурсы.