After testing, breaking up memory intensive code into a separate function allows the garbage collection to work.
For example the original code was like:-
while(true){
//do memory intensive code
}
can be turned into something like:-
function intensive($parameters){
//do memory intensive code
}
while(true){
intensive($parameters);
}