I have a collection about optimization. Columnar storage and garbage collection might be a thing (you might want to test them first). Also you could force some nodes to be written too disk.
Also a strategically placed Cache node might help.
Indeed one way could be to split the job into sub workflows
But in the end KNIME is a graphic platform based on Java so more power/RAM is always welcome