JNI bindings work and allow C#/.NET to call into Java libraries without a problem. It's a standardized interface for Java interop, a good example is how Apache Ignite runs in the .NET version which launches a JVM process and communicates with it from the CLR.