[#2841] Fix SingleThreadEventLoopTest that was failing because of GC pressure
Motivation: Sometimes the SingleThreadEventLoopTest did fail on our CI. This was because of GC pressure produced by Thread.sleep(...) when interrupted as it creates a new InterruptedException all the time (and need to fill it). Modifications: Replace Thread.sleep(...) with LockSupport.parkNanos(...) to eliminate exception overhead. Result: SingleThreadEventLoopTest produce a lot less garbage.
This commit is contained in:
parent
4599b7a0ba
commit
5b0f60cff9
@ -41,6 +41,7 @@ import java.util.concurrent.TimeUnit;
|
|||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
import java.util.concurrent.locks.LockSupport;
|
||||||
|
|
||||||
import static org.hamcrest.CoreMatchers.*;
|
import static org.hamcrest.CoreMatchers.*;
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
@ -732,11 +733,17 @@ public class SingleThreadEventLoopTest {
|
|||||||
thread.interrupt();
|
thread.interrupt();
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
// We use LockSupport.parkNanos() and NOT Thread.sleep() to eliminate the overhead of creating a new
|
||||||
Thread.sleep(TimeUnit.NANOSECONDS.toMillis(delayNanos(System.nanoTime())));
|
// InterruptedException on each wakeup(true) call. This is needed for various reasons:
|
||||||
} catch (InterruptedException e) {
|
// - Throwable.fillInStackTrace() is expensive
|
||||||
// Waken up by interruptThread()
|
// - GC pressure
|
||||||
}
|
// See https://github.com/netty/netty/issues/2841
|
||||||
|
//
|
||||||
|
// This may wake-up spuriously but we not care and just move on.
|
||||||
|
LockSupport.parkNanos(delayNanos(System.nanoTime()));
|
||||||
|
|
||||||
|
// Clear interruption state if it was interrupted by wakeup(true)
|
||||||
|
Thread.interrupted();
|
||||||
|
|
||||||
runAllTasks();
|
runAllTasks();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user