How to free java memory / Snappy

You say you start several times. So freeing the JVM memory will probably not help. Because with every run a new JVM is started, with new memory.
But you can try to invoke the garbage collection of the JVM. This would look like the following:

import jpy
System = jpy.get_type(‘java.lang.System’)
System.gc()

When using readPixels you should consider doing your computation linewise or in tiles and not the whole band at once.