the following source code in jdk , RMI part, forces a full gc every 1 hour , if no old gen gc has happened by then.
/** maximum interval between complete garbage collections of local heap */ private static final long gcInterval = // default 1 hour AccessController.doPrivileged( new GetLongAction("sun.rmi.dgc.client.gcInterval", 3600000)).longValue(); so if u have a large heap, and old gen gc does not happen frequently, you need to set #sun.rmi.dgc.client.gcInterval #sun.rmi.dgc.server.gcInterval to very high levels