On Tue, 15 Jul 2025 19:57:56 GMT, Phil Race <p...@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 130:

> 128: 
> 129:         public synchronized void dispose() {
> 130:             if (cfDictionaryPtr == 0) {

although the constructor throws an exception if it can't initialize this and 
also the native method checks for 0 too,
I decided to leave this existing check out of an abundance of caution.
It ensures that the method is safe to be called twice.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/26331#discussion_r2208550170

Reply via email to