package io.dropwizard.servlets.tasks; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMultimap; import java.io.PrintWriter; /** * Performs a full JVM garbage collection (probably). */ public class GarbageCollectionTask extends Task { private final Runtime runtime; /** * Creates a new GarbageCollectionTask. */ public GarbageCollectionTask() { this(Runtime.getRuntime()); } /** * Creates a new GarbageCollectionTask with the given {@link Runtime} instance. * <p/> * <b>Use {@link GarbageCollectionTask#GarbageCollectionTask()} instead.</b> * * @param runtime a {@link Runtime} instance */ public GarbageCollectionTask(Runtime runtime) { super("gc"); this.runtime = runtime; } @Override @SuppressWarnings("CallToSystemGC") public void execute(ImmutableMultimap<String, String> parameters, PrintWriter output) { final int count = parseRuns(parameters); for (int i = 0; i < count; i++) { output.println("Running GC..."); output.flush(); runtime.gc(); } output.println("Done!"); } private static int parseRuns(ImmutableMultimap<String, String> parameters) { final ImmutableList<String> runs = parameters.get("runs").asList(); if (runs.isEmpty()) { return 1; } else { try { return Integer.parseInt(runs.get(0)); } catch (NumberFormatException ignored) { return 1; } } } }