Cleanup unused classloaders Until now our classloader cache would only ever remove a classlaoder if it was replaced by another one with the same ID. This works fine if the daemon is used to build only one project. However, it becomes a serious memory leak if the daemon builds many different projects. This is a common scenario in Gradle integration tests, both in our own code base and for users testing their plugins with TestKit. In those cases the same daemon is used to build many different projects and the JVM can eventually run out of metaspace.
This change adjusts the classloader cache so that it only retains classloaders which were used either in the current build or the previous build. All older unused classloaders are discarded to free up memory.