On 19.09.16 23:02, Andy Lee wrote:
In JDK 9 the problem seems to be partially fixed; only the most recently
closed JFrame leaks (ie, a temporary leak).  I was unable to get Visual
VM to connect to the Java 9 process so I'm not exactly sure what was
preventing the last JFrame from being GC'd.


Can you place the code which uses JFrame somewhere? It seems that some of the related bugs were not backported, like:
https://bugs.openjdk.java.net/browse/JDK-8156116

I will check which one.


The Java 9 behavior would be sufficient to solve most of our major
issues, but it will be quite some time before it becomes feasible to
move our application to Java 9 so it doesn't really help us.

On Mon, Sep 19, 2016 at 2:51 PM, Sergey Bylokhov
<sergey.bylok...@oracle.com <mailto:sergey.bylok...@oracle.com>> wrote:

    On 19.09.16 19:13, Andy Lee wrote:

        Yes, I just tried my test case on JDK 8u112 and I can still
        reproduce
        the JFrame leak.


    And what about the latest jdk9?
    https://jdk9.java.net/download


        On Mon, Sep 19, 2016 at 11:26 AM, Sergey Bylokhov
        <sergey.bylok...@oracle.com <mailto:sergey.bylok...@oracle.com>
        <mailto:sergey.bylok...@oracle.com
        <mailto:sergey.bylok...@oracle.com>>> wrote:

            Hi, Andy.
            I suggest to check the latest jdk9 and jdk8. Do you able to
            reproduce this bug on jdk8u112?


            On 19.09.16 17:19, Andy Lee wrote:

                Not sure if this is the best place to ask, but I'm
        looking for
                good way
                to prevent the JFrame/JDialog memory leaks caused
                by https://bugs.openjdk.java.net/browse/JDK-8029147
        <https://bugs.openjdk.java.net/browse/JDK-8029147>
                <https://bugs.openjdk.java.net/browse/JDK-8029147
        <https://bugs.openjdk.java.net/browse/JDK-8029147>>

                The best solution I've found so far is to use reflection
        to dig
                in and
                null out the 'target' fields on the LWComponentPeer and
                CPlatformWindow
                after disposing.  This at least allows the JDialog/JFrame
                instance to be
                GC'd (along with any heavier objects they may
        reference), but isn't
                optimal since ultimately the LWComponentPeer and
        CPlatformWindow
                instances still end up leaking.  Another problem with this
                approach is
                that we have hundreds of uses of JFrames/JDialogs across our
                codebase
                and this workaround would require each one of them to be
                modified to add
                this special cleanup logic; I'd like to avoid that if at all
                possible~

                Any suggestions?

                ~Andy Lee



            --
            Best regards, Sergey.




    --
    Best regards, Sergey.




--
Best regards, Sergey.

Reply via email to