Created
September 27, 2022 12:47
-
-
Save daschl/8bc9cf5a5f27d9a351fa8de2ac69d028 to your computer and use it in GitHub Desktop.
This file contains hidden or 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 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