Dead Continuation cause resource leak?

Alex Otenko oleksandr.otenko at gmail.com
Thu May 28 07:01:01 UTC 2020


Good question. It can be extended to all Closeables


Alex

On Thu, 28 May 2020, 07:42 施慧, <kalinshi at qq.com> wrote:

> Hi All,
>
>
> Trying to understand Loom continuation implementation. In following
> LeakTest,  Continuation Object is unreachable after first yield, but
> its runnable target is not finished yet.
> There might be some resources allcoated during continuation run (native
> memory in this test case and free in finally block --- not cleaner way),
> when continuation object is collected, these resources are not closed or
> freed.
>
>
> Is it possible to "clean up" a dead continuation which is not finished yet
> but collecting by GC? 
>
>
> Tested with code cloned from github today.
> javac --add-exports java.base/jdk.internal.ref=ALL-UNNAMED --add-exports
> java.base/jdk.internal.misc=ALL-UNNAMED  LeakTest.java
> java --add-exports java.base/jdk.internal.ref=ALL-UNNAMED --add-exports
> java.base/jdk.internal.misc=ALL-UNNAMED  LeakTest
> clean continuation
>
>
>
> import jdk.internal.ref.Cleaner;
> import jdk.internal.misc.Unsafe;
> public class LeakTest {
>     private static final Unsafe unsafe = Unsafe.getUnsafe();
>     static ContinuationScope scope = new
> ContinuationScope("scope");
>     public static void main(String[] args) throws Exception {
>         bar();
>         System.gc();
>         Thread.sleep(1000);
>         System.gc();
>         Thread.sleep(1000);
>     }
>
>
>     public static void bar() {
>         Continuation cont = new Continuation(scope, ()
> -> {
>             long mem = 0;
>             try {
>                 // open file/socket
>                 mem =
> unsafe.allocateMemory(100);
>                
> Continuation.yield(scope);
>             } finally {
>                
> unsafe.freeMemory(mem);
>                
> System.out.println("release memory");
>             }
>         });
>         Cleaner.create(cont, () -> {
> System.out.println("clean continuation");  });
>         cont.run();
>         //cont.run();
>     }
> }
>
>
>
> Regards


More information about the loom-dev mailing list