Incidentally, System is a class.
Yes, System is a class (which is why I said "plus the System class"), but it's not object-oriented. It's as I described, an amalgamation of methods and fields.
System.in, System.out, and the standard error field violate OOP because they're not encapsulated with a method. Suppose Java changes the stream implementation and needs to change them later. It can't do so without breaking code. At the very least they could have made a getter method, or even better, made a class that deals with standard I/O. Arguably, Java is littered with these kinds of issues; I just bring up System because it's more or less the bastard child of Java.
Functions that deal with garbage collection and runtime-loadable libraries should be in a class that deals with the execution environment. Java already has the Runtime class, which of course has a gc() method which I'm sure the System class's gc() is just a stub for.
It also has .arraycopy(), which should be part of an Array class rather than the System utility class.
There are a couple things that the System class is good to have for, but in principle, it violates OOP, *and* it violates the small-library-toolkit approach used by Unix.