Skip to content

Instantly share code, notes, and snippets.

@daschl
Created September 27, 2022 12:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save daschl/f864f23d4936322490fc1497bddddd11 to your computer and use it in GitHub Desktop.
Save daschl/f864f23d4936322490fc1497bddddd11 to your computer and use it in GitHub Desktop.
import java.lang.ref.Cleaner;
public class ExternalCleaner {
public static void main(String... args) throws Exception {
while (true) {
SensitiveData data = new SensitiveData();
StateCleaner cleaner = new StateCleaner(data);
Thread.sleep(100);
System.gc();
}
}
static class SensitiveData {
public void clear() {
System.out.println("I'm getting cleared - yay!");
}
}
static class StateCleaner implements AutoCloseable {
private static final Cleaner cleaner = Cleaner.create();
static class State implements Runnable {
private final SensitiveData data;
State(SensitiveData data) {
this.data = data;
}
public void run() {
data.clear();
}
}
private final Cleaner.Cleanable cleanable;
public StateCleaner(final SensitiveData data) {
State state = new State(data);
this.cleanable = cleaner.register(this, state);
}
public void close() {
cleanable.clean();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment