package org.ahmadsoft.stream.loader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class CLTester { /** * @param args */ public static void main(String[] args) throws Exception { runGC(); long l1 = usedMemory(); System.out.println("mem=" + (l1)); Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager .getConnection("jdbc:mysql://localhost/mysql?user=root&password=foo&defaultFetchSize=10&useCursorFetch=true"); Statement stmt = connection.createStatement(); stmt.setFetchDirection(ResultSet.FETCH_FORWARD); runGC(); long l2 = usedMemory(); System.out.println("mem=" + (l2)); ResultSet rs = stmt.executeQuery("SELECT * FROM PRESIDENT"); runGC(); long l3 = usedMemory(); System.out.println("mem=" + (l3)); while (rs.next()) { //runGC(); long l4 = usedMemory(); System.out.println(" mem=" + (l4)); } connection.close(); } private static void runGC () throws Exception { // It helps to call Runtime.gc() // using several method calls: for (int r = 0; r < 4; ++ r) _runGC (); } private static void _runGC () throws Exception { long usedMem1 = usedMemory (), usedMem2 = Long.MAX_VALUE; for (int i = 0; (usedMem1 < usedMem2) && (i < 500); ++ i) { s_runtime.runFinalization (); s_runtime.gc (); Thread.currentThread ().yield (); usedMem2 = usedMem1; usedMem1 = usedMemory (); } } private static long usedMemory () { return s_runtime.totalMemory () - s_runtime.freeMemory (); } private static final Runtime s_runtime = Runtime.getRuntime (); }