Are their any APIs from the JDK that can retrieve the number of active threads and open sockets used by the VM. (not using any native code).
The Thread class has an enumerate() method that returns the number of threads in the current thread group and all sub-groups. Just call the method from a thread in the main thread group, (or any thread if your application doesn't create any threadgroups) and you'll get all the threads for you application.
You'll be missing some threads above your application, but for security reasons, you should not be accessing those threads anyway.