Snappy doesn't clear memory cache

The major part of the memory is allocated during writeProduct(…) because all the computation is triggered here.
Actually, the processing should not slow down as long there is memory available. As soon it reaches the limit, old data should be replaced with new the data.

Maybe you also edit the tile cache size. See here:

What you observe in point 2) is just the memory the JVM needs right after starting up.

This leads me to an idea. You could try to stop and restart the JVM after each product. I haven’t really tried this my self.
But maybe you give it a try.
Have a look at the __init__.py of snappy ( at github).
There are the calls:

jpy.create_jvm(options=_get_snap_jvm_options()) # line 235

and

jpy.destroy_jvm() # line 265

Maybe you can call it from your script. First, destroy it and then restart.