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.