incubator-jena-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andy Seaborne (JIRA)" <>
Subject [jira] [Commented] (JENA-91) extremely large buffer is being created in ObjectFileStorage
Date Tue, 09 Aug 2011 10:30:27 GMT


Andy Seaborne commented on JENA-91:

I believe this is caused by a deeper bug in TxTDB prototype which is causing internal corruption.
 Mad buffer sizes are a symptom - they can be a symptom for quite a few things in, it just
happens to show up in ObjectFileStorage

The reason it spikes and recovers is that the large allocate succeeds, but the read of the
item itself leads to an inconsistency and the code throws an exception.  Then the GC quickly
reclaims the byte buffer which was only ever local to the method so is a prime candidate for
recycling even if direct (non-mmap) memory.

Sanity check added.

Please add any more information to this item as it turns up.

Left open for now.  (It may just disappear when the real bug gets fixed without realizing
it also covers this.)

> extremely large buffer is being created in ObjectFileStorage
> ------------------------------------------------------------
>                 Key: JENA-91
>                 URL:
>             Project: Jena
>          Issue Type: Bug
>          Components: TDB
>         Environment: Windows (and I presume any little endian system)
>            Reporter: Simon Helsen
>            Priority: Critical
> I tried to debug the OME and check why a bytebuffer is causing my native memory to explode
in almost no time. It all seems to happen in this bit of code in com.hp.hpl.jena.tdb.base.objectfile.ObjectFileStorage
(lines 243 onwards)
>   // No - it's in the underlying file storage.
>         lengthBuffer.clear() ;
>         int x =, loc) ;
>         if ( x != 4 )
>             throw new FileException(""+loc+")["+filesize+"]["+file.size()+"]:
Failed to read the length : got "+x+" bytes") ;
>         int len = lengthBuffer.getInt(0) ;
>         ByteBuffer bb = ByteBuffer.allocate(len) ;
> My debugger shows that x==4. It also shows the lengthBuffer has the following content:
[111, 110, 61, 95]. This amounts to the value of len=1869495647, which is rather a lot :-)
Obviously, the next statement (ByteBuffer.allocate) causes the OME.

This message is automatically generated by JIRA.
For more information on JIRA, see:


View raw message