Невозможное переполнение Стэка

У меня есть программа которая делает множество вычислений с помощью рекурсий. Программа отлаженна, работает как надо: переполнений стэка или кучи нет; в функция рекурсии почти не имеет аргументов, чтобы небыло переполнения стэка.
Есть проблемма: программа при работе создаёт множество экземпляров небольшо класса, причём то создаёт, то удаляет их. Всё бы ничего, но при удалении некоторой кучи этих объектов программа подвисает на секунду или больше(я так понимаю из-за работы сборщика мусора). При интенсивной работе этой программы подвисания сильно увеличивают время работыпрограммы, что не приемлемо.
Для лечения этой болезни я создал специальный класс Memory, который в статичных полях создаёт, перед работой программы, 4 миллиона экземпляров того класса. И когда программе нужен объекта, этот класс даёт ссылку на один из созданных жкземпляров, а когда объект отработает свою работу, программа возвращает ссылку в класс Memory.
Так вот, теперь при работе программы она спустя недолгое время стала выдавать фатальную ошибку : java.lang.StackOverflowError: stack size 954MB (у меня размер стэка потока, в котором всё работает, задан около 1гб). Тоже бывает и при создании 4000 экземпляров.
Не понимаю в чем причина, ведь эти экземпляры находятся в глобальной переменной???