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