I think, if object is eligible for garbage collection then the JVM internally call the gc() method. System class contain static gc() method so jvm easily call this method using the class name i.e. System.gc(). But the Runtime class contain non-static gc() method, it is impossible to jvm to call this method directly b'coz it needs object to call non static method.
System.gc() method internally call the Runtime.getRuntime.gc()