You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flink.apache.org by "Kezhu Wang (Jira)" <ji...@apache.org> on 2021/03/13 07:40:00 UTC

[jira] [Created] (FLINK-21753) Cycle references between memory manager and gc cleaner action

Kezhu Wang created FLINK-21753:
----------------------------------

             Summary: Cycle references between memory manager and gc cleaner action
                 Key: FLINK-21753
                 URL: https://issues.apache.org/jira/browse/FLINK-21753
             Project: Flink
          Issue Type: Bug
          Components: Runtime / Task
    Affects Versions: 1.12.2, 1.11.3, 1.10.3
            Reporter: Kezhu Wang


{{MemoryManager.allocatePages}} uses {{this::releasePage}} as cleanup action in {{MemorySegmentFactory.allocateOffHeapUnsafeMemory}}. The cleanup function is used as gc cleaner action there. This creates a cycle referencing between memory manager and gc cleaner *if allocated memory segment is not {{MemoryManager.release}} in time.* Symptoms should be different based on versions:
 * Before 1.12.2: memory will not be reclaimed until gc after {{MemoryManager.release}}
 * * 1.12.2: memory will not be reclaimed until {{MemorySegment.free}} or gc after {{MemoryManager.release}}

I quotes javadoc from jdk {{java.lang.ref.Cleaner}} here for references:

{quote}The cleaning action is invoked only after the associated object becomes phantom reachable, so it is important that the object implementing the cleaning action does not hold references to the object. In this example, a static class encapsulates the cleaning state and action. An "inner" class, anonymous or not, must not be used because it implicitly contains a reference to the outer instance, preventing it from becoming phantom reachable. The choice of a new cleaner or sharing an existing cleaner is determined by the use case.
{quote}
See also FLINK-13985 FLINK-21419.

I pushed [test case|https://github.com/kezhuw/flink/commit/9a5d71d3a6be50611cf2f5c65c39f51353167306] in my repository after FLINK-21419 (which merged in 1.12.2 but not before) for evaluation.

cc [~azagrebin] [~xintongsong] [~trohrmann] [~ykt836] [~nicholasjiang] 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)