On 10/07/2013 10:36 PM, Peter Levart wrote:

The back-off before retrying looks good, I just wonder if 1ms is too low to start with.

The tests show that in majority of calls (at least on fast CPUs), thread does not sleep at all and if it really must sleep, a single sleep(1) is usually enough. So why sleep more? We have exponential back-off, so on slower CPUs, where longer sleeps might be needed, a couple of iterations more will be enough to reach the right point in time. I'll try the measurement on Raspberry PI. I wonder how it behaves there...

Hi,

I have found some time to incorporate the review comments and created new webrev which is attatched to JIRA task:

https://bugs.openjdk.java.net/browse/JDK-6857566

I'm not asking to re-review this yet, since I'll bring it up again when JDK9 is started. I just wanted to inform you that I did some testing on Raspbery PI and the patch behaves similarly. I had to spawn 4 allocating threads to provoke OOME on unpatched JDK8. With the patch, running 16 allocating threads, I see about 90% of allocations being done without helping ReferenceHandler thread, 5% of allocations while helping but before System.gc() and another 5% while helping and after System.gc() but before any sleeps. I have not yet seen a situation where a single sleep(1) was needed on Raspbery PI. So this makes me believe that sleeping up to 9 times (up to 0.5 s) before throwing OOME is very conservative. The worst situation I noticed was a very rare case of two consecutive sleeps: sleep(1) followed by sleep(2) before satisfying the reservation request.

Regards, Peter

Reply via email to