• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1' Copyright (c) 2021-2022 Huawei Device Co., Ltd.
2' Licensed under the Apache License, Version 2.0 (the "License");
3' you may not use this file except in compliance with the License.
4' You may obtain a copy of the License at
5'
6' http://www.apache.org/licenses/LICENSE-2.0
7'
8' Unless required by applicable law or agreed to in writing, software
9' distributed under the License is distributed on an "AS IS" BASIS,
10' WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11' See the License for the specific language governing permissions and
12' limitations under the License.
13
14@startuml
15
16skinparam monochrome true
17
18title Mark phase
19:Collect roots and mark them;
20
21while (The Mark Stack is not empty)
22    :Get an object from the stack;
23    if (object is in collected space) then(Yes)
24        if (The object is a Reference object in the same generation space with reference) then(Yes)
25            if (the referent object is marked) then(Yes)
26            else (No)
27                :Put the object into the corresponding queue;
28            endif
29            :Mark all fields in Reference except 'referent';
30        else (No)
31            :Mark all fields in object;
32        endif
33    else (No)
34    endif
35endwhile
36legend
37    mark object == mark object and add all non-primitive fields to the Mark Stack
38    mark all fields in object == mark all directly referenced objects and add their un-marked fields to Mark Stack
39endlegend
40stop
41@enduml
42