JMH Question: execution of code when iteration completes before TearDown
Aleksey Shipilev
shade at redhat.com
Tue Sep 27 12:54:18 UTC 2016
On 09/26/2016 05:15 PM, Lev Serebryakov wrote:
> On 23.09.2016 09:24, Aleksey Shipilev wrote:
>>> I have asymmetric JMH test for a blocking queue-like data structure and
>>> can't find what's proper way to execute actions that will unblock treads
>>> blocking on my queue in JMH. I've supposed to do "unblocking" in @TearDown
>>> part of thread-specific state but it seems like @TearDown is not executed
>>> till all threads are finished.
>>
>> See this sample:
>> http://hg.openjdk.java.net/code-tools/jmh/file/e810ce09937a/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_30_Interrupts.java
> It works, but here is one missing bit in JMH, needed for such
> benchmarks, IMHO: thread-level setup method. As result, I have
> handrolled framework to test different implementations of blocking ring
> buffer specific to my task, because some implementations of (my)
> interest need some initialization, which should be done in context of
> working threads (it assume, that reader and writer threads are never
> changed after setup, which is valid for my task), but only once before
> data pumping.
How's that different from making an additional @State(Thread) object,
and store the thread-local data there? Its @Setup/@TearDown methods
would be touched by the worker thread only:
http://hg.openjdk.java.net/code-tools/jmh/file/e810ce09937a/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_03_States.java
It can even initialize after the shared @State(Benchmark) object:
http://hg.openjdk.java.net/code-tools/jmh/file/e810ce09937a/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_29_StatesDAG.java
-Aleksey
More information about the jmh-dev
mailing list