Oh, that's an easy one. As our friend says, the documentation says it all.
Basically System.exit() calls to Runtime.getRuntime().exit(). (yes, because Runtime.exit() is a compile exception. that method is NOT static. The only static method there getInstance() and another one I don't even going to bother to remember because it's deprecated)
Question is, why are there two ways to perform the same functionality? Well, by convention, historical reasons and convenience.
A closer look to the Runtime class tells us that it follows the 'Factory method' pattern. This is, its constructor is private (to prevent you from creating new instances of Runtime) and there is an static reference that you access through Runtime.getRuntime() -the pattern says the method should be called: getInstance() , but anyways... -. The 'Factory method' pattern is a great solution for singleton objects, like in this case. I know you didn't asked this, but nevertheless ;-)