Default Java multidimensional arrays are of fixed number of dimensions and are complex initialized.
But few attempts of custom implementations cause hunderd times slower operation.
Why?
The code below compares two custom classes Array1 and Array2 with built-in arrays. Both custom implementations require hundred more time than built-it.
I have posted entire code onto github as I was told: https://github.com/lodnikova/Try_MultidimBenchmark3
I tried to avoid boxing, recursion and other potential slowdowns.
Also I included benchmarking of NDArray class of Vectorz library.
Also I did repeating of the same operation for three times.
I found that speed is very unpredictable.
Allocating all arrays...
Done.
Writing array1 (nested Object[])
Attempt: 0
Attempt 0 done. 60000000 elements in 2.540285659 seconds
Attempt: 1
Attempt 1 done. 60000000 elements in 9.411849662 seconds
Attempt: 2
Attempt 2 done. 60000000 elements in 5.808331906 seconds
Writing array2 (mapped plain Double[])
Attempt: 0
Attempt 0 done. 60000000 elements in 16.246523827 seconds
Attempt: 1
Attempt 1 done. 60000000 elements in 8.317891235 seconds
Attempt: 2
Attempt 2 done. 60000000 elements in 23.501270648 seconds
Writing array3 (conventional)
Attempt: 0
Attempt 0 done. 60000000 elements in 5.914992997 seconds
Attempt: 1
Attempt 1 done. 60000000 elements in 1.120277519 seconds
Attempt: 2
Attempt 2 done. 60000000 elements in 13.563776366 seconds
Writing array3 (NDArray of Vectorz)
Attempt: 0
Attempt 0 done. 60000000 elements in 1.461343338 seconds
Attempt: 1
Attempt 1 done. 60000000 elements in 0.943231111 seconds
Attempt: 2
Attempt 2 done. 60000000 elements in 1.384088957 seconds
Reading array1 (nested Object[])
Attempt: 0
Attempt 0 done. 60000000 elements in 0.271591626 seconds
Attempt: 1
Attempt 1 done. 60000000 elements in 0.238402884 seconds
Attempt: 2
Attempt 2 done. 60000000 elements in 0.242798686 seconds
Reading array2 (mapped plain Double[])
Attempt: 0
Attempt 0 done. 60000000 elements in 0.192451361 seconds
Attempt: 1
Attempt 1 done. 60000000 elements in 0.17005682 seconds
Attempt: 2
Attempt 2 done. 60000000 elements in 0.17020843 seconds
Reading array3 (conventional)
Attempt: 0
Attempt 0 done. 60000000 elements in 0.221501481 seconds
Attempt: 1
Attempt 1 done. 60000000 elements in 0.205166342 seconds
Attempt: 2
Attempt 2 done. 60000000 elements in 0.20135264 seconds
Reading array4 (NDArray of Vectorz)
Attempt: 0
Attempt 0 done. 60000000 elements in 1.020388133 seconds
Attempt: 1
Attempt 1 done. 60000000 elements in 0.950194307 seconds
Attempt: 2
Attempt 2 done. 60000000 elements in 0.977558831 seconds
Total application time is 97.40557648 seconds
Array2class, please see.