You seem to suggest that your application has a memory leak. To begin debugging, you can use jmap, a utility that comes with the JDK (usually found on the bin directory next to java, javac, javadoc, ...etc). This command will produce a memory map of all objects sitting in your JVM. You can run it over time as your application is running and compare object counts to see if there is any type of object that seems to have a continuously increasing total count, but no reductions (as a result of Garbage Collections).
jmap -heap -histo <PROCESS_ID_OF_YOUR JVM>
If you are indeed not closing your statement objects properly, you will quickly see them bubble up to the top of your stack.
All "closable" objects should be closed in finally blocks to avoid leaving open connections, statements, ...etc lingering in the JVM if an exception is thrown before you get to the close.
note: on windows, these executables have the .exe suffix.