I figured it out. Java jdbc need some time to flush the cache after all 
batch are executed.

On Wednesday, 22 November 2023 at 11:36:39 UTC+8 Andrei Tokar wrote:

> Hi Peter,
> It is really hard to tell exactly what the problem with your code is, 
> because it is not a complete one, but in case of OOM some "irrelevant" 
> details may be a culprit.
> Nevertheless, it looks like "data" is some sort of a queue, continuously 
> populated by another thread, or just a big chunk of preropulated data?
> In both cases your condition for batch commit (data.size() % 100000 == 0 
> || data.size() < 100000) looks suspicious. Let's assume prepopulated data 
> of size 
> 100000 * 12345 +1
> You may end up committing batch of size 1.2 billion+, wchich would totally 
> explain OOM..
>
> On Tuesday, November 21, 2023 at 5:41:30 AM UTC-5 [email protected] wrote:
>
>> Dear All
>>     I keep clicking the data to h2 by stmt.addBatch(), after i called 
>> executeBatch, memory is not free, so finally out of memory, may i know why 
>> please?
>>
>>
>> @Override
>> public void run() {
>> while (!stopped) {
>> synchronized (sharedLock) {
>> try {
>> // System.out.println("data.size() =" + data.size());
>> for (int z = 0; z < data.size() && z < 100000; z++) {
>> Object[] temp;
>> synchronized (data) {
>> temp = data.pollLast();
>> }
>> int x = 1;
>> stmt.setLong(x++, (Long) temp[0]);
>> stmt.setString(x++, (String) temp[1]);
>> stmt.setString(x++, (String) temp[2]);
>> stmt.setString(x++, (String) temp[3]);
>> stmt.setInt(x++, (int) temp[4]);
>> for (int tempX = 0; tempX < registers.size(); tempX++) {
>> stmt.setLong(x, ((BigInteger) temp[x - 1]).longValue());
>> x++;
>> }
>> stmt.addBatch();
>> }
>> if (data.size() % 100000 == 0 || data.size() < 100000) {
>> stmt.executeBatch();
>> conn.commit();
>> }
>> } catch (SQLException ex) {
>> Logger.getLogger(H2Thread.class.getName()).log(Level.SEVERE, null, ex);
>> }
>> }
>> try {
>> Thread.sleep(500);
>> } catch (InterruptedException ex) {
>> Logger.getLogger(H2Thread.class.getName()).log(Level.SEVERE, null, ex);
>> }
>> }
>> }
>>
>> thanks
>> Peter ([email protected])
>>
>

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/h2-database/3c91ec9e-39c5-45f4-b1c3-f7bf6c40b7b3n%40googlegroups.com.

Reply via email to