On Wed, 25 Nov 2020 13:37:48 GMT, Maurizio Cimadamore <mcimadam...@openjdk.org> 
wrote:

> Looks like a good cleanup. I agree that mixing access and instantiation is 
> not good from a benchmark perspective - although, given that direct buffers 
> have a rather convoluted allocation process, I guess it would be useful, in 
> the long term, to track performances of that too (this can be done by 
> coupling direct buffer allocation with calls to Unsafe::invokeCleaner, so 
> that the benchmark is not affected by the GC activity).

I'll see if I can write a test for this.

> Also, given a carrier e.g. `float` there are at least two ways to get a float 
> from a byte array:
> 
> * ByteBuffer::getFloat (both direct/heap)
> * FloatBuffer::get() (both direct/heap)
> 
> The benchmark here focuses on the first bullet, but I think at some point we 
> should also cover the remaining axis, so that, for each carrier, we really do 
> at least 4 tests. Of course if you take into account swappiness for non-byte 
> carriers, you get an extra variant for direct buffers as well, as you wanna 
> test native endian vs. non-native endian.

Yes, good observation - I had similar thoughts. Let me check if we could easily 
integrate some of these variants. What I'm trying to end up with is a 
comprehensive(ish) set of test scenarios that can be used to analyse 
performance ( of which views and endianness are important).

It may be reasonable for this particular benchmark to include views, etc, with 
appropriately named benchmark methods, so that one can easily run a subset, 
e.g. 
"org.openjdk.bench.java.nio.ByteBuffers.test(Direct)?(BulkPut|SinglePutByte)", 
when trying to "zoom in" on a specific code path.

-------------

PR: https://git.openjdk.java.net/jdk/pull/1430

Reply via email to