void insert(ArrayList myList){
conn = openDBConnection(); //Database Connection
Iterator iterator = myList.iterator();
while(iterator.hasNext()){
insertIntoDB((myClass)iterator.next(),conn);
}
closeDBConnection();
}
void insertIntoDB(myClass myObject, Connection conn){
String query = "insert into myTable values(?,?)";
PreparedStatement myStatement = conn.prepareStatement(query);
myStatement.setInt(1,myObject.getMyKey());
myStatement.setInt(2,myObject.getMyValue());
myStatement.execute();
}
В приведенном выше коде myList
является arrayList
объектов с более чем 1.2M записей. Я получаю следующее сообщение об ошибке после установки около 1000 записей:Out Of Ошибка памяти: Java Heap Space - PreparedStatement MySQL
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at com.mysql.jdbc.PreparedStatement.<init>(PreparedStatement.java:437)
at com.mysql.jdbc.Connection.clientPrepareStatement(Connection.java:2187)
at com.mysql.jdbc.Connection.prepareStatement(Connection.java:4829)
at com.mysql.jdbc.Connection.prepareStatement(Connection.java:4734)
at com.att.research.space.SpaceDaoImpl.insertMapping(SpaceDaoImpl.java:99)
at com.att.research.space.ElementMappingLoader.insertMappingData(ElementMappingLoader.java:68)
at com.att.research.space.CorrelationEngine.loadMappingFiles(CorrelationEngine.java:69)
at com.att.research.space.CorrelationEngine.main(CorrelationEngine.java:25)
Я попытался с помощью System.gc()
внутри цикла итератора. Но я не думаю, что это хороший способ кодировать, а также он потребляет много процессорного цикла.
Приведенный выше код является образцом кода моего исходного кода.
Вы пытались увеличить кучу по вариантам jvm? –
Нет, я не пробовал это, но я знал, что это тоже вариант. Я хочу, чтобы мой код был правильным –
Это не так. Вы получаете ошибку, потому что ваш код неправильный. – duffymo