Skip to content

Instantly share code, notes, and snippets.

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