Why is this Java program taking up so much memory?
JVM garbage collector will eventually clear your memory heap. For manually clearing that heap call Runtime.getRuntime().gc();
, but I don't advise doing that for every 5 minutes.
The other answers are right that Java will use as much memory as it is allowed to, at which point it will garbage collect. To work around this, you can specify a smaller max heap size in the JVM settings. You do this with the -Xmx setting. For example, if you think you only need 32MB, run it as:
java -Xmx32M [your main class or jar here]
The heap of your program (the non-stack memory) will never take more than 32MB, but it will crash if it needs more than that at once (and that's where you'll need to profile). I don't see any obvious leaks in your program (assuming ImageIO doesn't require any cleanup), though, so I think you'll be fine.