On Tue, 15 Jul 2025 20:24:36 GMT, Sergey Bylokhov <s...@openjdk.org> wrote:
>> Eliminate a finalize() method in the Swing macOS implementation. >> >> I tested that the dispose method is being called by running this small test >> in combination with some 'println' statements in the source code (now >> removed) >> >> import javax.swing.JTabbedPane; >> import javax.swing.plaf.TabbedPaneUI; >> >> public class CreateTabbedPaneUIStressTest { >> >> public static void main(String[] args) { >> for (int i=0; i<1000000000; i++) { >> JTabbedPane jtp = new JTabbedPane(); >> TabbedPaneUI tpui = jtp.getUI(); >> } >> } >> } >> >> >> I also monitored the process size using 'top'. >> And when I commented out the native call that did the free and re-tested I >> saw process size grow. >> >> Turning the above into a useful regression test doesn't seem possible to me. >> Limiting Java heap is pointless (and I did use -Xmx20m) since it is a native >> resource that is to be freed and failure to dispose won't show up as a >> problem without taking down the machine. > > src/java.desktop/macosx/classes/apple/laf/JRSUIControl.java line 115: > >> 113: flipped = other.flipped; >> 114: cfDictionaryPtr = getCFDictionary(flipped); >> 115: if (cfDictionaryPtr == 0) throw new RuntimeException("Unable to >> create native representation"); > > Just a side topic to discuss: In the past I tried to look into this pattern > and figure out is it possible for the GC to start cleaning the object after > we allocate the native resource but before we register it with > Disposer.addRecord. In such a case, the cleanup might never be executed. > > Perhaps we should consider adding a reachabilityFence at the end of > Disposer.addRecord, for both the DisposerRecord and the referent, to ensure > they remain reachable. Similarly how it was done for cleaner: > https://hg.openjdk.org/jdk9/jdk9/jdk/rev/1f33e517236e > Or may be we can just use cleaner. there is even a bug for Cleaner that the reachabilityFence should be moved to the end of register: https://bugs.openjdk.org/browse/JDK-8291867 If there are no objectiosn I'll add it to the Disposer.addRecord in a separate bug. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/26331#discussion_r2208767482