You might consider ND4J.org, a numerical computing library for the JVM. It has Java and Scala APIs, and employs a fair amount of C++ under the hood to run efficiently. Unlike Breeze, ND4J handles n-dimensional arrays. It's the bridge between the JVM and JPC. The JVM's garbage collection is a bit too slow, so we reimplemented memory management in C++. ND4J powers another open-source framework, Deeplearning4j.org. Both are Apache 2.0 licensed.