Ho notato il seguente comportamento.Java JDBC clearBatch() e memoria heap
Ho un file di circa 3 MB contenente diverse migliaia di righe. Nelle righe ho diviso e creato una dichiarazione preparata (circa 250.000 dichiarazioni).
Quello che faccio è:
preparedStatement
addBatch
do for every 200 rows {
executeBatch
clearBatch().
}
alla fine
commit()
L'utilizzo della memoria aumenterà a circa 70MB, senza errore di memoria insufficiente. È possibile ridurre l'utilizzo della memoria? e hanno il comportamento transazionale (se uno fallisce, tutti falliscono). Sono stato in grado di abbassare la memoria eseguendo il commit con lo executeBatch
e clearBatch
... ma ciò causerà un inserimento parziale del set totale.
Questo potrebbe essere molto dipende dalla qualità del driver JDBC - quale sono stai usando? – skaffman
Sono passato da 200 a 10000 e il tempo di esecuzione è ora di 37 secondi. Sembra che sia stata usata la stessa misura. Sto usando il file org.h2.jdbcx.JdbcConnectionPool di H2 i dati sono memorizzati come file .. non in memoria. Sto cercando di creare un'applicazione locale senza un server di database come oracle, mysql, ecc. – Firone
Sei sicuro che l'elevato utilizzo della memoria è legato all'elaborazione del database e non all'I/O del file dall'importazione? – Timothy