I've been working with Java for a while and now I came around native methods and JNI. I think that Java without native functionality can just manage its memory (create classes and fields and pass data from one method to another, and declare primitive types), but all things like thread management, data I/O and its stuff and more similar things are done thanks to native methods.
Now I know that native methods (eg: thread start is declared as private native void start0(); which starts a new thread) have corresponding library which (I'm not sure but should) directly communicate with JVM instance or another system libraries (OpenGL communicates this way).
Is the above text true or is there something more going on? And additional question, where are these libraries (that API's native methods use) loaded? I know that you need to load a library with your custom native method. API does so or it is done by JVM automatically?