(Disclaimer: I'm the author of JavaCL and BridJ)
In addition to its JNA-based version, JavaCL has a fully-functional BridJ port that's entirely licensed under BSD (as BridJ is itself BSD-licensed).
FYI BridJ offers significantly lower per-call overhead than JNA, nearing JNI performance while still being very portable (it's currently released with 32 and 64 bits binaries for Windows, Linux and MacOS X, but other platforms are planned).
The performance of low-level bindings is not the only thing to consider, though. While the object-oriented APIs of JavaCL and JOCL look similar, you have to look after the extra goodies. I don't know about JOCL, but JavaCL ships with :
- transparent #include of files from the Java classpath or from any URL
- automatic and transparent caching of program binaries
- reduction utilities
- linear algebra utils
- a random number generator (a library, not a demo !)
- a nice GUI to experiment with image transform kernels within seconds
- a maven plugin that parses the OpenCL kernels (found in src/main/opencl) and generates typed program classes with one typed Java method per kernel (enforcing correctness of the arguments list at compile-time)
JavaCL is also used by ScalaCL (general-purpose OpenCL-backed collections + Scala compiler plugin to optimize code), which is a nice way of avoiding to write any kernel at all (albeit still in heavy development as of this writing).
Another thing to consider is the easy availability of binaries for standard platforms (Windows, Linux and MacOS X at least) and integration to build systems such as Maven. JavaCL used to be the best IMHO, but things might have changed (and for sure will change).
Finally, Marco Hutter's JOCL is another OpenCL binding, but with no high-level API. It might prove to be faster than OpenCL4Java (JavaCL) or JOCL for low-level calls, though.
EDIT: JavaCL is now covered by a chapter in Matthew Scarpino's OpenCL in Action book.