Clone
Stefan Oehme <stefan@gradle.com>
committed
on 30 Oct 18
Cleanup unused classloaders
Until now our classloader cache would only ever remove a classlaoder
if it was replaced by another one with the … Show more
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.

Show less

master + 409 more