import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.value.ObservableValue; public class UnbindLeak { public static void main(String[] args) { ObservableValue p = new SimpleObjectProperty(true); BooleanProperty q = new SimpleBooleanProperty(); reportMemoryUsage(); for(int i = 0; i < 10_000_000; ++i) { q.bind(p); q.unbind(); } reportMemoryUsage(); } private static void reportMemoryUsage() { System.gc(); Runtime runtime = Runtime.getRuntime(); long used = runtime.totalMemory() - runtime.freeMemory(); double mb = 1024*1024; System.out.printf("Used Memory after GC: %.2f MB\n", used / mb); } }