' Copyright (c) 2021 Huawei Device Co., Ltd. ' Licensed under the Apache License, Version 2.0 (the "License"); ' you may not use this file except in compliance with the License. ' You may obtain a copy of the License at ' ' http://www.apache.org/licenses/LICENSE-2.0 ' ' Unless required by applicable law or agreed to in writing, software ' distributed under the License is distributed on an "AS IS" BASIS, ' WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ' See the License for the specific language governing permissions and ' limitations under the License. @startuml skinparam monochrome true title Mark phase :Collect roots and mark them; while (The Mark Stack is not empty) :Get an object from the stack; if (object is in collected space) then(Yes) if (The object is a Reference object in the same generation space with reference) then(Yes) if (the referent object is marked) then(Yes) else (No) :Put the object into the corresponding queue; endif :Mark all fields in Reference except 'referent'; else (No) :Mark all fields in object; endif else (No) endif endwhile legend mark object == mark object and add all non-primitive fields to the Mark Stack mark all fields in object == mark all directly referenced objects and add their un-marked fields to Mark Stack endlegend stop @enduml