JNI faster than Unsafe?

Robert Stupp snazy at snazy.de
Sat Feb 7 09:02:13 UTC 2015


Hi there,

I've setup a single microbenchmark just to know which off-heap memory allocation is faster on Linux + OSX. Candidates were Unsafe.allocateMemory and JNA's Native.malloc(). Both either against "raw" OS and against a preloaded jemalloc (LD_PRELOAD).

My initial suspicion was, that both (Unsafe vs. Native) should perform quite equally since both methods are basically just wrappers for C malloc(). But they don't.

Native.malloc() is much faster compared to Unsafe.allocateMemory().
Depending on the individual microbenchmark, Native.malloc() is up to 3 times faster than Unsafe.allocateMemory().

Here's a spreadsheet, that I've worked out during the benchmark.
https://docs.google.com/spreadsheets/d/1kHqPArBXKI1izSRBcGyfomuQqq5VJHQUkrMxulqOpQc/edit#gid=0
(you may safely ignore the jemalloc-via-JNA stuff)

The JMH source is here: https://github.com/snazy/cassandra/blob/8714-row-cache-jemalloc/test/microbench/org/apache/cassandra/test/microbench/OffHeapAllocationBench.java

—
Robert Stupp
@snazy



More information about the hotspot-dev mailing list