Ответ 1
В основном SBT, когда компилирует и запускает вашу программу, использует только одну JVM - ту, с которой она была запущена. Таким образом, если в метапассе есть что-то, что не может быть собрано в мусор, у вас может не хватить памяти - например, если вы создаете какое-либо соединение (я видел примеры MongoDB или ElasticSearch) и забыл закрыть его при выключении, он останется открытым, предотвращая вы собираете несколько объектов - после нескольких циклов перекомпиляции-перезагрузки эти несколько объектов могут использовать ваш метапас.
Таким образом, это утечка памяти, которая обычно не влияет на вашу программу, но SBT делает ее видимой как исключение, которое вы видели.
В долгосрочной перспективе вы должны идентифицировать утечку и удалить ее, для обходного пути вы можете использовать что-то вроде револьвера SBT, что позволяет вам запускать программу в другой JVM - таким образом, утечки памяти не будут суммироваться, так как вы будете просто закрывать и запускать новую JVM вместо того, чтобы запускать все в одной JVM как SBT.