«OutOfMemoryError: невозможно создать новый собственный поток» не относится к памяти кучи.Это не поможет вам обнулить ссылки или использовать мягкие / слабые ссылки.Более того, увеличение размера кучи может только усугубить ситуацию.
Java использует собственную память для стеков потоков.Каждый раз, когда вы запускаете поток, новый стек выделяется вне кучи JVM.Стек не освобождается, пока поток не завершится.Рассмотрите возможность использования менее параллельных потоков (например, вы можете управлять числом, используя ThreadPoolExecutor), или, возможно, уменьшите размеры стека (используя -Xss {size} k)
См. Также этот пост ,который описывает много типов ошибок нехватки памяти.