This is
really not an important distinction, but the difference is that "programmatic" exceptions are thrown by
Java code (either yours, or in a library) while exceptions "thrown by the JVM" means just that: created and thrown from the native code that makes up the JVM. Any type of exception can be thrown programmatically, while there is a finite list of exception types that the JVM itself might throw.
From the perspective of a Java programmer calling a method, there's no way to tell whether an exception that came from that call was thrown programmatically or not -- nor is it especially useful to know.