Created
September 27, 2022 12:57
-
-
Save daschl/f864f23d4936322490fc1497bddddd11 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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