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