Hola,
¿Que tiene que ver una cosa con la otra? Bueno, el garbage collector hace su trabajo y el GC de Java es una de las mejores implementaciones que existen. Pero aún así un mal diseño de programación puede permitir 'memory leaks', aunque no son muy frecuentes con Java tanto como en C o C++ también está afecto a eso.
Otra cosa es la 'dependencia' del sistema operativo, aún cuando Java implementa casi todas las operaciones normales siempre va a recaer sobre la implementación del OS. Por ejemplo, para manejar ventanas va a depender de la implementación de Windows XP o GNOME u otros para funcionar, si estos últimos no funcionan exactamente como se espera posiblemente puedan existir problemas de memoria.
Otro caso sería una función recursiva infinita, y muchos otros ejemplos, pero ese tipo de problemas son difíciles de detectar aún con mucha experiencia, y en muchos casos se necesita una revisión exhaustiva al código fuente para saber donde está el problema.
Saludos,