RFR (S) CR 6857566: (bf) DirectByteBuffer garbage creation can outpace reclamation
Aleksey Shipilev
aleksey.shipilev at oracle.com
Wed Oct 2 14:43:06 UTC 2013
Hi,
There is the issue that annoys me all the time:
https://bugs.openjdk.java.net/browse/JDK-6857566
Please review the rework of DirectByteBuffer cleanup mechanics fixing
that issue. Since DBB uses sun.misc.Cleaner as the infrastructure to
clean up things, we focus there:
http://cr.openjdk.java.net/~shade/6857566/webrev.00/
Brief explanation is there in Cleaner comments.
Testing:
- jtreg: jdk/nio tests on Linux x86_64/fastdebug
- original sample test from 6857566, reproduces in a few seconds
nicely with -XX:MaxDirectMemorySize=16M; more than 90 minutes run with
patched build yield no OOMEs!
- microbenchmarking, see below
The microbenchmark tests allocates ByteBuffer.allocateDirect(N), with
N=1,10,100,1000 bytes:
http://cr.openjdk.java.net/~shade/6857566/directbb/
On my 2x2 i5 Linux x86_64 laptop:
Before patch (1 thread):
direct_1 834 +- 159 ns/op
direct_10 888 +- 262 ns/op
direct_100 969 +- 307 ns/op
direct_1000 1618 +- 46 ns/op
Before patch (4 threads):
direct_1 <OOME!>
direct_10 <OOME!>
direct_100 <OOME!>
direct_1000 <OOME!>
Single threaded allocators are working fine, but this means nothing,
because more threads just plainly OOME.
After patch (1 thread):
direct_1 1645 +- 68 ns/op
direct_10 1623 +- 53 ns/op
direct_100 1704 +- 44 ns/op
direct_1000 3327 +- 43 ns/op
After patch (4 threads):
direct_1 4673 +- 80 ns/op
direct_10 4673 +- 114 ns/op
direct_100 4771 +- 89 ns/op
direct_1000 22310 +- 14390 ns/op
Thanks,
-Aleksey.
More information about the core-libs-dev
mailing list