2015-11-17 3 views
0

Я использую addBatch/executeBatch вставить несколько записей в таблице базы данных Oracle, но я столкнулся следующую ошибку heapsizeHeapsize ошибка executeBatch JDBC

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
    at java.lang.reflect.Array.newArray(Native Method) 
    at java.lang.reflect.Array.newInstance(Array.java:52) 
    at oracle.jdbc.driver.BufferCache.get(BufferCache.java:212) 
    at oracle.jdbc.driver.PhysicalConnection.getCharBuffer(PhysicalConnection.java:7422) 
    at oracle.jdbc.driver.OraclePreparedStatement.setupBindBuffers(OraclePreparedStatement.java:2826) 
    at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:9973) 
    at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:213) 

Я добавил следующий параметр

-Xms1024m -Xmx1024m 

при вызове программы без везения. Добавление 1024m было хорошо для 180k записей, но он продолжает сбой на 290k. Я попытался увеличить его до 4024 м, но это не поможет.

+0

Вы пытались выполнить команду 'Runtime.getRuntime(). TotalMemory();' найти общую память для JVM – Ramanlfc

+0

Не выполнять всю партию сразу, так как все данные должны храниться в памяти до тех пор, пока не будут выполнены все инструкции ; собрать достаточно большое число (например, где-то между 100 и 1000) и выполнить. –

ответ

0

Для каждой настройки параметра памяти вы найдете номер записи, который завершится с ошибкой.

Разделить строки в блоках управляемого размера и выпуска после добавления каждого блока

sendBatch() 

В Oracle вы можете также установить

setExecuteBatch(blockSize) 

где blockSize является количество строк, которые будут проходил в каждом кругообороте.

+0

Спасибо за отзыв, но я ценю, если вы уточните, как я новичок в JAVA и jdbc –

+0

PLS проверить некоторые учебники по этой теме, например. для [Oracle Batching] (http://docs.oracle.com/cd/B28359_01/java.111/b31224/oraperf.htm) –

Смежные вопросы