If you are talking about memory (and, by extension, handles) allocated within native code, it is outside of the purview of the JVM's garbage collector - there is nothing it can do about it so you are on your own. If you don't release the memory in the native code when you are done, it will leak.
If you are referring to the Java objects through which you access the native code, they are perfectly normal objects which will be collected when they become unreachable.
If your native code must release resources before you let the Java object go, the Java object should have a dispose method of some sort which when called will release the native resources and invalidate the Java object from further use. Simply call the dispose method and let the object reference go.
Once last thing, I am aware of no way to unload a native library once loaded.