WO2023113267A1 - 생존 경로 정보 기반 가비지 컬렉션 방법 - Google Patents

생존 경로 정보 기반 가비지 컬렉션 방법 Download PDF

Info

Publication number
WO2023113267A1
WO2023113267A1 PCT/KR2022/018275 KR2022018275W WO2023113267A1 WO 2023113267 A1 WO2023113267 A1 WO 2023113267A1 KR 2022018275 W KR2022018275 W KR 2022018275W WO 2023113267 A1 WO2023113267 A1 WO 2023113267A1
Authority
WO
WIPO (PCT)
Prior art keywords
path
garbage
information
survival
objects
Prior art date
Application number
PCT/KR2022/018275
Other languages
English (en)
French (fr)
Inventor
지대훈
Original Assignee
인터와이즈(주)
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인터와이즈(주) filed Critical 인터와이즈(주)
Publication of WO2023113267A1 publication Critical patent/WO2023113267A1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation

Definitions

  • the present invention relates to a garbage collection method for processing automated memory management when a computer program is executed, and a garbage collection system using the same.
  • garbage object An object that is no longer referenced in a computer program (unreachable object) is called a garbage object, and an automated memory management system that detects such garbage objects and frees the memory space allocated to the object is called a garbage collection system or It is called the garbage collector.
  • garbage collectors can be divided into path tracing and reference counting methods.
  • Tracing Garbage Collection begins with objects whose addresses are stored in global variables and local variables, etc., continuously traces objects referenced through member variables of the object, marks them all, and then marks unmarked objects as garbage objects. way to determine.
  • memory management can be completely automated, the downside is that it takes a long time to run the task because it is possible to determine garbage objects only after the tracking of non-garbage objects is completed.
  • the reference counting method (Reference Counting Garbage Collector) counts the number of variables that refer to a specific object. When the address of an object is stored in a variable, the reference count of the object is increased, and when the contents of the variable are changed, the It is a method of decrementing the reference count of an object and determining that the object is garbage the moment the reference count of the object becomes 0. Since unused memory can be immediately recovered, memory reuse efficiency is high.
  • the cited prior art document relates to a hybrid garbage collection method using a path tracing method complementary to a reference counting method.
  • the hybrid method uses the reference counting method, but detects cyclic garbage through additional path search.
  • the hybrid garbage collection method is not widely used because it does not show a large performance difference despite the complexity of implementation.
  • the present invention is to solve the problems of the conventional garbage collection technology as described above, and provides a garbage collection method and system capable of improving memory usage efficiency and computer program execution speed by increasing garbage collection execution speed using survival path information. is intended to provide
  • the garbage collection method of the present invention includes a reference information change step (S100) of changing the information on the base reference number of each object, the referrer object list, and the safe reference according to the change of the object reference variable, among the objects whose base reference number is 0
  • a survival path-based garbage detection step ( S300 ) and a garbage processing step ( S500 ) of processing the garbage objects detected in the survival-path based garbage detection step are included.
  • the reference information changing step (S100) may include, if an address value of an object is stored in a base variable, increasing a base reference number value of the object; and if the address value of one object stored in the base variable is deleted, decreasing the base reference number value of the object.
  • the reference information changing step when an object referencing the object is referred to as a referencer object and the object is referred to as a referenced object, the reference information is set to a member variable of the referrer object. adding information about the referrer object to a referencer list of the referenced object when the address value of the referrer object is stored; and deleting information on the referrer object from a reference list of the referenced object when the address value of the referenced object stored in a member variable of the referenced object is deleted.
  • the survival path-based garbage detection step (S300) stores survival path information of the object by storing information about a safe reference located on the survival path of each object among object references for each object
  • the step of doing; may include.
  • the reference information changing step (S100) may include erasing the safe referencer information of the object when the reference connection between the object and the safe referencer of the object is disconnected.
  • the object in the step of classifying the unsafe object (S200), immediately after changing the object reference variable, if the base reference number of the object is 0 and the safe reference is not designated, the object is classified as the unsafe object. Classification can be characterized.
  • the object in the step of classifying the unsafe object (S200), immediately after the change of the object reference variable, when the base reference number of the object is 0 and the safe reference is not designated, the object is classified into an unstable object list. storing in, periodically examining local variables included in the stack of the application program and changing the base reference number of objects referred to by local variables, the base reference number of objects included in the list of unstable objects is 0, and determining an object to which the safe reference is not specified as the unsafe object.
  • the surviving path-based garbage detection step (S300) may further include storing all objects tracked while searching the survival path of the unsafe object in a reverse direction in a visited object list. there is.
  • the surviving path-based garbage detection step (S300) may be characterized in that all objects included in the visited object list are determined as garbage when the survival path search of the unsafe object fails.
  • the survival path-based garbage detection step (S300) when the survival path of the unsafe object is successfully searched, the found survival path is divided into one or more sections, and short path information including a starting point object for each section Short path generation step of generating and storing (S400); can include more.
  • the generating of the short path information includes extracting non-shortened sections continuously connected to objects having no short path information among objects included in the survival path of the insecure object; generating new shortened path information including start point object information of an unshortened section; and setting short-path information of objects belonging to the non-shortened section, excluding the starting point object of the non-shortened section, as the generated shortcut path information.
  • the surviving path-based garbage detection step (S300) is a step of searching for a survival path of a starting point object of the short path instead of the object when searching for a survival path of an object having the short path information and if there is a survival path of the starting point object of the short path, determining that the survival path of all objects belonging to the short path also exists; and if the survival path search of the starting point object of the short path fails, the It may further include; invalidating the short path information so that it cannot be used any more.
  • the short path information included in the object is no longer used. It may be characterized in that it further includes; step of invalidating to prevent.
  • the surviving path-based garbage detection step (S300) includes determining the object as garbage when the base reference count of the object is 0 and all references to the object are determined to be garbage objects. can be characterized.
  • the present invention increases the garbage determination speed to minimize the decrease in application program execution speed due to garbage collection execution.
  • an application program can be more smoothly executed even in a system with a small memory capacity.
  • FIG. 1 is a flowchart illustrating a garbage collection method according to an embodiment of the present invention.
  • FIG. 2 is a configuration diagram illustrating variable change information according to an embodiment of the present invention.
  • FIG. 3 is a configuration diagram illustrating object reference information according to an embodiment of the present invention.
  • FIG. 4 is a configuration diagram illustrating short path information according to an embodiment of the present invention.
  • FIG. 5 is a configuration diagram of a computer system using a garbage collector according to an embodiment.
  • FIG. 6 is a flowchart illustrating a step of changing reference information (S100) according to an embodiment of the present invention.
  • S200 unsafe object classification step
  • FIG. 8 is a flowchart illustrating a garbage detection step (S300) based on survival path according to an embodiment of the present invention.
  • S340 survival path search step
  • 10 is a diagram for explaining a survival path of an object.
  • FIG. 11 is a diagram illustrating a state in which survival path information is stored using safety referrer information of an object.
  • FIG. 12 is a diagram for explaining a survival path search process.
  • FIG. 13 is a diagram for explaining a process of determining cyclic garbage through survival path search
  • object object reference variable
  • 'object' is defined as 'structure capable of automatic garbage collection' capable of automated memory management.
  • a variable that can store the address value of an object that is, a variable that can store the address of a structure that can be automatically garbage collected, is defined as an 'object reference variable'.
  • Base variables include local variables, global variables, and member variables included in information structures that cannot be automatically garbage collected.
  • the number of base variables referencing object X is defined as the 'number of base references' of X.
  • An object whose base reference number is 1 or more is defined as a 'base object', and an object whose base reference count is 0 is defined as a 'stem object'.
  • Object 1 is the base object referenced by global variable 1, and the base reference count is 1.
  • Object 2 is the base object referenced by two base variables, local variable 1 and global variable 2, and the base reference count is 2. Except for objects 1 and 2, all other objects correspond to stem objects whose base reference number is 0.
  • base reference number information is used to determine whether a base object exists. Accordingly, as long as it is possible to determine the base object, it is irrelevant even if the base reference number value does not match the number of base variables, and there are no restrictions on the unit and method for increasing or decreasing the base reference count. However, it should be able to determine whether it is a base object by comparing the base reference count value of the object with 0.
  • X refers to Y and Y is referred to by X.
  • X is defined as the 'referrer' of Y
  • Y is defined as the 'referent' of X.
  • a virtual connection line connecting two objects having a referencer-referenced relationship is defined as a 'reference connection'.
  • Reference links are directional. Moving from the referrer to the referenced is defined as 'forward direction', and moving from the referenced to the referrer is defined as 'reverse direction'.
  • an arrow direction in the drawing corresponds to a forward direction.
  • the object corresponding to the starting point of the arrow is the reference, and the object the arrow points to is the referenced.
  • an object refers to itself, that is, when an object's own address is stored in a member variable of an object, it is not treated as a reference connection. That is, objects cannot be references or referees to themselves.
  • a virtual path connecting two objects X and Y is defined as a 'connection path' of objects X and Y.
  • One or more connection paths between two objects may or may not exist.
  • Searching for a connection path between two objects is defined as 'path search'.
  • Finding a connection path by tracing a reference connection in a forward direction is defined as 'forward path search', and 'reverse path search' is defined as finding a connection path by tracing a reference connection in a backward direction.
  • a closed curve connecting path starting from one object and returning to the starting point via one or more other objects is defined as a 'circular path'. There may be none or more than one circular path through the two objects.
  • garbage objects an object that is cycled with other garbage objects is defined as 'cyclic garbage'.
  • Existing reference counting methods have a problem of not detecting cyclic garbage.
  • the single-line connection path connecting object X and the base object is defined as the 'survival path' of object X.
  • the first path contains objects 2, 8, and 9, and the second path contains objects 1, 3, 4, 7, 8, and 9.
  • a base object is always considered to have a survival path. That is, the survival path of the base object X corresponds to the path where X is the starting point and the ending point.
  • a stem object that is not connected to a base object that is, a stem object that does not have a survival path, corresponds to a garbage object.
  • An object that requires garbage determination that is, a stem object for which survival path existence is not checked is defined as an 'unsafe object'.
  • a reference whose survival path is confirmed to exist is defined as a 'safe referrer'.
  • the reference of X included in the survival path of object X identified through path search corresponds to the 'safe reference' of X.
  • survival path information of each object may be stored by storing safety reference information of each object included in the found survival path.
  • FIG. 11 is a diagram showing a state in which one safety reference information is stored for each object and one survival path information is stored for each object.
  • One safe reference was designated for every stem object on the drawing, and the survival path connected through the safe reference was indicated by a solid line.
  • the object at the starting point of the arrow is a safe reference to the object the arrow points to.
  • survival path information connecting objects 9, 8, and 2 is stored. That is, the safe reference of object 9 is object 8, and the safe reference of object 8 is object 2.
  • the found survival path is divided into one or more sections, and information of a starting point object and an ending point object is stored for each section, which is defined as a 'safe shortcut'.
  • FIG. 14 shows a state in which a short path is generated by dividing the survival path shown in FIG. 13 into a plurality of sections, and solid lines and dotted lines are alternately used to distinguish each short path.
  • a shortcut path 1 corresponds to a solid line starting from object 1 and connecting objects 3, 4, and 7, and a shortcut path 2 corresponds to a dotted line starting from object 4 and connecting objects 5 and 6.
  • Short path 3 is shown as a solid line starting from object 2 and connecting objects 8, 9, 10, and 11, and short path 4 is shown as a dotted line starting from object 10 and connecting objects 12 and 13.
  • FIG. 2 is a configuration diagram showing variable change information according to an embodiment of the present invention.
  • the variable change information 210 includes a reference increase object 211, which is the address of an object newly stored in a variable, and a reference decrease object whose address value was stored in the variable immediately before the variable was changed. Contains information about (212).
  • FIG. 3 is a configuration diagram illustrating object reference information according to an embodiment of the present invention.
  • reference information 220 of each object includes base reference number 221 information for determining whether the object is a base object, and a reference list 222 storing information on referrer objects that refer to the object. ) information may be included.
  • the object reference information 220 may include a safety reference 223 storing reference information included in the survival path of the corresponding object and a short path 224 indicating a short path information structure passing through the object.
  • FIG. 4 is a configuration diagram showing short path information according to an embodiment of the present invention.
  • the short path information 230 may include a start point object 231 of the short path, an end point object 232 of the short path, and tracking state 233 information for storing the short path tracking state. .
  • tracking state 233 indicates that the path passing through the corresponding shortened route is 'tracing', and if it is false, it indicates that the path is 'tracing ended'.
  • object and structure are expressed in pseudo code using the Java language expression method, it is as follows.
  • some or all of the object reference information 220 may be stored outside the object, but for ease of explanation, the following capital code takes the form of embedding all of the object reference information 220 for each object.
  • SafeShortcut safeShortcut INVALID_SHORTCUT
  • FIG. 1 is a flowchart illustrating a garbage collection method according to an embodiment of the present invention.
  • the present invention relates to a garbage collection method for detecting a garbage object by checking whether a survival path exists, and is characterized by minimizing the number of times of survival path search and processing survival path search more quickly by storing and managing survival path information.
  • the garbage collection method includes a reference information change step (S100), an unsafe object classification step (S200), a survival path based garbage detection step (S300), a short path generation step (S400), garbage A processing step (S500) is included.
  • S100 reference information change step
  • S200 unsafe object classification step
  • S300 survival path based garbage detection step
  • S400 short path generation step
  • S500 garbage A processing step
  • reference information changing step (S100) reference information of objects related to the changed object reference variable is changed.
  • the base variable is changed, the base reference number 221 of the object is changed, and when the member variable of the object is changed, the reference list 222 and safe reference 223 information of the object are changed.
  • the base reference number 221 is used to determine whether a base object exists, and the reference list 222 is used to search for a reverse survival path.
  • the present invention features a process of storing survival path information of each object and a process of classifying a stem object having no survival path information as an unsafe object.
  • the survival path-based garbage detection step (S300) is a step of detecting garbage objects simultaneously with searching for an unsafe object's survival path.
  • the present invention features a process of concurrently processing a survival path search and a garbage object selection process using this principle.
  • the survival path search step (S340) performed within the survival path based garbage detection step (S300) searches the survival path of an unsafe object in a reverse direction, storing all objects tracked during the path search in the visited object list, , and stores the found survival path information.
  • the short path creation step (S400) is performed to generate the short path information 230 for the corresponding survival path.
  • the short path information 230 is used to more quickly search the survival path of each object.
  • the survival path of each object is divided into one or multiple sections, and the start point object 231 and end point object 232 of the section Short path information 230 storing information, etc. is created, and when a route via the corresponding short path is searched, objects belonging to the short path are skipped and another short path 230 or object connected to the short path is tracked. By doing so, the route search time can be reduced.
  • FIG. 5 is a configuration diagram of a computer system using a garbage collector according to an embodiment of the present invention.
  • a computer system using a garbage collector includes a garbage collector 110, a runtime system 120, an OS 130, and an execution code 140.
  • the execution code 140 refers to code written by a programmer, and the runtime system 120 refers to a base program that is basically loaded when an application program is created, and includes an OS-dependent memory management system and an interpreter.
  • the execution code 140 transfers a variable change request to the runtime system 120 .
  • the runtime system 120 transfers the variable change information 210, which is a collection of information on objects related to the variable change, to the garbage collector 110 right before or after the variable change.
  • the garbage collector 110 analyzes variable change information to change object reference information 220 , detects garbage objects based on the object reference information 220 , and requests the runtime system 120 to release garbage objects.
  • the runtime system 120 receives the memory 131 allocated in block units through the OS 130 and returns it again.
  • the execution code 140 and the runtime system 120 refer to and change the memory through the CPU.
  • the CPU copies a part of the memory to the internal cache memory 132 so that the memory can be referred to more quickly.
  • the efficiency of using the memory 131 and the CPU cache memory 132 may be increased, thereby improving the execution speed of the application program.
  • FIG. 6 is a flowchart illustrating a process of processing variable change information performed in the reference information change step (S100) according to an embodiment of the present invention.
  • the reference addition step (S120 to S122) and the reference deletion step (S140 to S144) are executed, respectively. .
  • the object is determined to be valid.
  • the following is a pseudocode showing a process of processing variable change information 210 in the reference information change step S100 according to an embodiment of the present invention.
  • the reference adding steps are steps of changing the reference information 220 of the reference increasing object 211 .
  • a base reference increment step (S121) is performed, and if the referrer object 213 information is valid, a reference connection add step (S122) is performed.
  • the base reference number 221 value of the reference increasing object is increased.
  • reference deletion steps are steps of changing the reference information 220 of the reference reduction object 212 .
  • the base reference reduction step (S121) is executed, and if the referrer object 213 information is valid, the reference connection deletion step (S122) is moved.
  • the base reference reduction step (S141) the base reference number 221 value of the reference reduction object 212 is reduced, and the reference deletion step is terminated.
  • referencer object 213 information is deleted from the referencer list 222 of the reference reduction object 212.
  • the survival path information erasure step S144 the safety reference information 223 of the reference reduction object 212 is erased, and the short path information 224 included in the reference reduction object 212 is invalidated.
  • Invalidation of the short path means to mark the disconnected short path information 230 as not to be used any more.
  • the corresponding shortcut path 230 is invalidated.
  • FIG. 7 is a flowchart showing the process of classifying an unsafe object (S200).
  • a process of storing safety referencer 223 information constituting the survival path of each object, and a stem object without safety referencer 223 information, that is, a stem object without survival path information are insecure. Characteristically performs the process of classifying objects. The present invention minimizes the number of survival path searches by not re-searching the survival path of an object having survival path information.
  • the object is determined as an unsafe object.
  • a garbage collection system that detects garbage in real time can be configured by performing the survival path based garbage detection step (S300) simultaneously with determining an unsafe object.
  • garbage collection should be performed asynchronously.
  • the unsafe object classification step (S200) is divided into two steps. First, unstable objects are primarily classified by determining unstable objects simultaneously with variable changes (S220) and storing them in an unstable object list (S222).
  • the runtime system 120 or the garbage collector 110 periodically performs a base object marking step (S240) to change the base reference number 221 of objects referenced by local variables in the stack of the application program. It is marked so that it can be identified as an object.
  • S240 a base object marking step
  • the survival path based garbage detection step (S300) performs a survival path search preparation step (S320), a survival path search step (S340), and a survival path search result processing step (S360).
  • a visit object list to be used in the survival path search step (S340) is created.
  • the visited object list is used to prevent duplicate survival path search for the same object during the survival path search step (S340) and to identify a list of garbage objects when the survival path search fails.
  • the survival path search step (S340) is a step of searching for an unsafe object's survival path.
  • searching for a survival path a list of all objects tracked in the visited object list is stored, and when a survival path is found, survival path information is stored through the safety reference 223 of the object.
  • the survival path search result processing step (S360) is a step of performing a shortcut path generation step (S400) or a garbage processing step (S500) according to the survival path search result.
  • the survival path search result processing step (S360) determines that all objects included in the visited object list are garbage, and proceeds to the garbage processing step (S500).
  • the survival path search result processing step (S360) proceeds to the shortcut path generation step (S400), and short path information for the survival path starting from the unsafe object is generated.
  • the survival path based garbage detection step (S300) is expressed in pseudo code as follows.
  • boolean hasSurvivalPath findSurvivalPath(unsafeObj, visitedNodes);
  • the survival path search step (S340) includes a base object check step (S341), a visit object list addition step (S342), a shortcut route tracking step (S344 to S347), a reverse route tracking step (S348 to S351), and survival route information storage.
  • Step S352 may be included.
  • the base object confirmation step (S341) if the tracked object is the base object, a survival path search success value is returned.
  • survival path search for the base object since a base object is considered to have a survival path consisting of only one base object, survival path search for the base object always succeeds.
  • step S342 of adding a visited object list a tracking object is added to the visited object list.
  • the validity of the short path 224 S of the tracked object is determined (S343), and if the short path S is valid, the short path tracing steps (S344 to S347) are performed to first search for a survival path via the short path S. .
  • step S344 of checking the fast path tracing status it is checked whether the fast path S is currently being tracked by checking the value of the tracking status 233 of the fast path S.
  • the short path S is currently being tracked, that is, when a circular path via the short path is formed, survival path information via the short path is not valid, so the process proceeds to the short path information erasure step (S347). .
  • the survival path search step (S345) of the shortcut path starting point object is a step of recursively performing the survival path search step (S340) for the starting point object 231 of the shortcut path S to which the tracking object belongs. After changing the value of the tracking state 233 of the shortcut path S to being tracked (true), the survival path of the starting point object 231 is searched. After the search for the survival path of the starting point object 231 is completed, the tracking state 233 of the short path is changed to a tracking end value (false).
  • the survival path search result of the fast path starting point object is examined (S346), and a success value is returned if successful, and if unsuccessful, the process proceeds to the fast path information erasure step (S347).
  • S346 The survival path search result of the fast path starting point object is examined (S346), and a success value is returned if successful, and if unsuccessful, the process proceeds to the fast path information erasure step (S347).
  • the short path S is invalidated so that the corresponding short path information is no longer used, and the reverse path tracking steps (S348 to S351) are executed.
  • the referrer R included in the referrer list 222 of the tracked object is sequentially taken (S348), the duplicate tracking avoidance step (S349) and the referrer survival path search step (S350) and the referrer survival path search result checking step (S351) is repeatedly executed.
  • the duplicate tracking avoidance step (S349) it is checked whether the referencer R is included in the visited object list, and if included in the visited object list, the survival path search step (S350) for the referencer R is not executed, thereby finding the same object. Prevent tracking more than once.
  • the survival path search step of the referencer R is a step of recursively performing the survival path search step (S340) for the referencer R.
  • the survival path search result of the referencer R is examined (S351), and if the survival path search is successful, the survival path information storage step (S352) is performed to change the safety reference 223 of the tracking object to R, and the success value returns
  • SafeShortcut S tracingNode.safeShortcut
  • boolean survivalPathFound findSurvivalPath(S.startObj, visitedNodes);
  • boolean survivalPathFound findSurvivalPath(R, visitedNodes);
  • FIG. 12 is a diagram for explaining a survival path search process.
  • the survival path search step (S340) is a recursive process of recursively executing the survival path search step (S340) for the referrer of the tracking object to select a reference that has succeeded in survival path search as a safe referrer. Therefore, the survival path search step (S340) of this embodiment is implemented as a recursive function that calls itself inside the function.
  • FIG. 12 shows the result of resetting the survival path of objects connected to the rear of object 8, such as object 8 and object 9, by searching the survival path of object 8 when the reference connection between object 8 and object 2 shown in FIG. 11 is broken. will be.
  • the survival path search process of object 8 includes T1 searching for the survival path of object 7, the reference of object 8, T2 searching for the survival path of object 4, the reference of object 7, and T2 searching for the survival path of object 4, the reference of object 4.
  • the survival path search function is executed in the following order: T3 searches the survival path of object 3, T4 searches the survival path of object 6, the reference of object 3, and T5 searches the survival path of object 5, the reference of object 6.
  • F6 which returns a failure value because object 4, the only reference to object 5, is included in the visited object list
  • F7 which returns a failure value because the survival path search for object 5, the only reference to object 6, failed
  • T8 which searches for the survival path of object 1, which is another reference of object 3, is executed
  • R9 which returns a success value because object 1 is a base object, is executed.
  • FIG. 13 is a diagram for explaining a process of detecting cyclic garbage through a survival path based garbage detection step (S300).
  • FIG. 13 shows a disconnected state of objects 8 and 9 posted in FIG. 11, and it can be seen that all five objects from objects 9 to 13 are garbage objects without a survival path connecting the base object.
  • objects 9, 10, 12, and 13 correspond to cyclic garbage that is cyclically connected to each other.
  • the present invention classifies object 9, which has been disconnected from object 8, which is a safe reference, as an insecure object, and searches the reference connection of objects starting from object 9 in a reverse direction. to search the survival path connected to the base object.
  • the present invention stores all objects tracked while searching for a survival path in the visited object list, and the principle that references to garbage objects are also garbage objects, that is, if all references to stem objects are garbage, the stem object is also a garbage object. Characteristically performs a process of detecting a garbage object at the same time as searching for a survival path using .
  • survival path search process for object 9 proceeds in the following order: object 13, the reference of object 9, object 12, the reference of object 13, and object 10, the reference of object 12. do. Finally, since object 9, the only reference of object 10, is already stored in the visited object list, survival path search fails without reaching the base object.
  • garbage processing step (S500) is executed.
  • garbage processing object 10 the reference connection information of objects 10 and 11 is deleted. Accordingly, after object 11 is also classified as an incomplete object, garbage processing steps (S500) are sequentially performed.
  • FIG. 14 is a diagram for explaining a process of generating shortcut path information.
  • short path information is generated by dividing the survival path found in the survival path search step (S340) into one or a plurality of sections.
  • the survival path search step (S340) among the objects included in the survival path found in the survival path search step (S340), objects that do not have valid short path information 230 are collected, new short path information 230 is created, and included in the corresponding short path.
  • the addresses of the corresponding shortcut path information 230 are stored in the shortcut paths 224 of objects other than the starting point object 231 among the selected objects.
  • the starting point object 231 of the newly created shortcut path is an object included in another shortcut path or a base object.
  • object 4 which is the starting point object 231 of shortcut path 2
  • object 10 which is the starting point object 231 of shortcut path 4
  • shortcut path 3 It is an object included in
  • the short path is used to rapidly search for a survival path by omitting the tracking of other objects within the short path and tracking only the start or end point objects of the short path.
  • the shortcut path corresponds to a partial section of the survival path connected through the safety reference, if the survival path of the starting point object of the shortcut path exists, the survival paths of all objects included in the shortcut path also exist.
  • the present invention features a process of rapidly searching for a survival path of an object included in a short path by omitting the tracking of other objects within the short path and tracking only the start point or end point object of the short path using this principle.
  • object 10 which is the starting point of the short path 4 to which object 13 belongs
  • object-2 which is the starting point of the short path 2 to which object 10 belongs
  • the survival path search process of the unsafe object 8 shown in FIG. 12 can be processed more quickly.
  • object 7, which is a reference to object 8 is included in shortcut path 1.
  • object 8 can quickly check whether the survival path of object 7 exists by searching for the survival path of object 1, which is the starting point object of the shortcut path to which object 7 belongs, instead of object 7. Since object 1 is a base object, it can be confirmed that object 7 belonging to the short path 1 connected to object 1 also has a survival path. Subsequently, by designating object 7 as a safe reference for object 8, the survival path search process of object 8 can be quickly terminated.
  • step of creating a shortcut path among the found survival paths, extracting non-shortened sections that are consecutively connected to objects that do not have the shortcut path 224 information, and a shortcut having start point object information of the non-shortened section It consists of a step of generating route information and a step of storing the newly created shortcut route information in the shortcut paths 224 of objects belonging to the non-shortened section excluding the starting point object. This is the code. While tracing the survival path of the object leading to the safety reference in the reverse direction, a section continuously connected to objects for which the short path information is not valid is found and new short path information 230 is generated.
  • obj.safeShortcut newShortcut
  • obj obj. safeReferrer
  • obj obj.safeShortcut.startObj;
  • the garbage processing step (S500) is a step of performing a garbage processing procedure on the garbage objects determined in the survival path search-based garbage determination step (S500).
  • garbage processing step (S500) before deleting the garbage object, reference connection information between the garbage object and referenced objects of the garbage object is deleted, and then the runtime system 120 is requested to release the object.
  • some of the referenced objects of garbage objects are determined to be incomplete objects, so that the survival path search (S300) and garbage processing process (S500) may be sequentially processed.
  • the present invention can be applied to a software field that minimizes a decrease in application program execution speed due to garbage collection execution by increasing the garbage determination speed.
  • the present invention can be applied to a wearable device using a mobile or limited system by recovering memory of garbage objects more quickly and increasing memory utilization so that an application program can be executed more smoothly even in a system with a small memory capacity.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

본 발명은 생존 경로 탐색을 통해 가비지를 검출하는 가비지 컬렉션 방법에 관한 것으로, 객체 참조 변수의 변경에 따라 각 객체의 기반 참조수, 참조자 객체 목록 및 안전 참조자에 대한 정보를 변경하는 참조 정보 변경 단계(S100), 기반 참조수가 0인 객체 중 상기 안전 참조자에 대한 정보가 존재하지 않는 객체를 가비지 판별이 필요한 불안전 객체로 분류하는 불안전 객체 분류 단계(S200), 불안전 객체와 기반 객체를 연결하는 생존 경로를 역방향으로 탐색하여 가비지 객체를 검출하는 생존 경로 기반 가비지 검출 단계(S300), 생존 경로 기반 가비지 검출 단계에서 검출된 가비지 객체들을 처리하는 가비지 처리 단계(S500)를 포함한다.

Description

생존 경로 정보 기반 가비지 컬렉션 방법
본 발명은 컴퓨터 프로그램 실행 시 자동화된 메모리 관리를 처리하기 위한 가비지 컬렉션 방법 및 이를 이용한 가비지 컬렉션 시스템에 관한 것이다.
컴퓨터 프로그램에서 더 이상 참조되지 않는 객체(unreachable object)를 가비지 객체라 하며, 이러한 가비지 객체를 검출하여 해당 객체에 할당된 메모리 공간을 해제하는 자동화된 메모리 관리 시스템을 가비지 컬렉션 시스템(garbage collection system) 또는 가비지 컬렉터(garbage collector)라 한다. 일반적으로 가비지 컬렉터는 경로 추적 방식과 참조수 계산 방식으로 구분할 수 있다.
경로 추적 방식(Tracing Garbage Collection)은 전역 변수와 로컬 변수 등에 그 주소가 저장된 객체에서부터 시작하여 객체의 멤버 변수를 통해 참조된객체를 연속적으로 추적하여 모두 마킹한 후, 마킹되지 않은 객체를 가비지 객체로 판별하는 방식이다. 메모리 관리를 완전히 자동화할 수 있으나, 가비지가 아닌 객체에 대한 추적을 완료한 이후에 비로소 가비지 객체의 판별이 가능하므로 작업 실행 시간이 긴 것이 단점이다.
참조수 계산 방식(Reference Counting Garbage Collector)은 특정 객체를 참조하는 변수의 수를 세는 방식으로, 객체의 주소가 변수에 저장될 때 해당 객체의 참조수를 증가시키고, 변수의 내용이 변경될 때 해당 객체의 참조수를 감소시켜, 객체의 참조수가 0이 되는 순간 해당 객체를 가비지로 판별하는 방식이다. 사용되지 않는 메모리를 즉각적으로 회수할 수 있으므로 메모리 재사용 효율성이 높다.
그러나, 참조수 계산 방식은 여러 개의 객체가 서로 참조하는 순환 참조가 발생하면, 해당 객체들 모두가 접근 불가능한 상태가 된 이후에도 해당 객체들의 참조수가 0이 되지 않아 가비지로 판별하지 못하는 문제가 있다.
언급된 선행 기술 문헌은 참조수 계산 방식과 더불어 보완적으로 경로 추적 방식을 사용하는 혼합형 가비지 컬렉션 방식에 관한 것이다. 혼합형 방식은 참조수 계산 방식을 사용하되, 추가적인 경로 탐색을 통해 순환 가비지를 검출한다. 혼합형 가비지 컬렉션 방식은 구현의 복잡성에도 불구하고, 큰 성능 차이를 보여주지 못하여 널리 사용되지 않고 있다.
가비지 컬렉션 실행으로 인한 응용프로그램의 속도 저하 및 뒤늦은 가비지 처리에 따른 메모리 사용 효율성 감소 문제에 대한 개선이 계속적으로 필요한 상황이다.
본 발명은 상기와 같은 종래의 가비지 컬렉션 기술의 문제점을 해소하기 위한 것으로, 생존 경로 정보를 이용하여 가비지 컬렉션 수행 속도를 높임으로써 메모리 사용 효율성 및 컴퓨터 프로그램 수행 속도를 향상시킬 수 있는 가비지 컬렉션 방법 및 시스템을 제공하는 것을 목적으로 한다.
본 발명의 가비지 컬렉션 방법은 객체 참조 변수의 변경에 따라 각 객체의 기반 참조수, 참조자 객체 목록 및 안전 참조자에 대한 정보를 변경하는 참조 정보 변경 단계(S100), 기반 참조수가 0인 객체 중 상기 안전 참조자에 대한 정보가 존재하지 않는 객체를 가비지 판별이 필요한 불안전 객체로 분류하는 불안전 객체 분류 단계(S200), 불안전 객체와 기반 객체를 연결하는 생존 경로를 역방향으로 탐색하여 가비지 객체를 검출하는 생존 경로 기반 가비지 검출 단계(S300), 생존 경로 기반 가비지 검출 단계에서 검출된 가비지 객체들을 처리하는 가비지 처리 단계(S500)를 포함한다.
일 실시예에 있어서, 상기 참조 정보 변경 단계(S100)는, 기반 변수에 한 객체의 주소값이 저장되면, 상기 객체의 기반 참조수 값을 증가시키는 단계; 및 기반 변수에 저장된 한 객체의 주소값이 지워지면, 상기 객체의 기반 참조수 값을 감소시키는 단계를 포함할 수 있다.
일 실시예에 있어서, 상기 참조 정보 변경 단계(S100)는, 상기 객체를 참조하는 객체를 참조자 객체라고 하고, 상기 객체를 피참조자 객체라고 할 때에, 상기 참조자 객체의 멤버 변수에 상기 피참조자 객체의 주소값이 저장되면, 상기 피참조자 객체의 참조자 목록에 참조자 객체에 대한 정보를 추가하는 단계; 및 상기 참조자 객체의 멤버 변수에 저장된 상기 피참조자 객체의 주소값이 지워지면, 상기 피참조자 객체의 참조자 목록에서 참조자 객체에 대한 정보를 삭제하는 단계;를 포함하는 것을 특징으로 할 수 있다.
일 실시예에 있어서, 상기 생존 경로 기반 가비지 검출 단계(S300)는 객체의 참조자 중 각 객체의 생존 경로 상에 위치한 안전 참조자에 대한 정보를 각 객체 별로 저장함으로써 상기 객체의 생존 경로 정보를 저장하는 단계;를 포함할 수 있다.
일 실시예에 있어서, 상기 참조 정보 변경 단계(S100)는, 상기 객체와 상기 객체의 안전 참조자간 참조 연결이 끊어지면, 상기 객체의 안전 참조자 정보를 소거하는 단계;를 포함하는 것을 특징으로 할 수 있다.
일 실시예에 있어서, 상기 불안전 객체 분류 단계(S200)는, 객체 참조 변수의 변경 직후, 상기 객체의 기반 참조수가 0이고, 상기 안전 참조자가 지정되지 않은 상태가 되면, 상기 객체를 상기 불안전 객체로 분류하는 것을 특징으로 할 수 있다.
일 실시예에 있어서, 상기 불안전 객체 분류 단계(S200)는, 상기 객체 참조 변수의 변경 직후, 상기 객체의 기반 참조수가 0이고, 상기 안전 참조자가 지정되지 않은 상태가 되면, 상기 객체를 불안정 객체 목록에 저장하는 단계, 주기적으로 응용 프로그램의 스택에 포함된 로컬 변수를 조사하여 로컬 변수에 의해 참조된 객체의 기반 참조수를 변경하는 단계, 상기 불안정 객체 목록에 포함된 객체 중 기반 참조수가 0이고, 상기 안전 참조자가 지정되지 않은 객체를 상기 불안전 객체로 판별하는 단계를 포함하는 것을 특징으로 할 수 있다.
일 실시예에 있어서, 상기 생존 경로 기반 가비지 검출 단계(S300)는 상기 불안전 객체의 생존 경로를 역방향으로 탐색하는 동안 추적한 모든 객체를 방문 객체 목록에 저장하는 단계를 더 포함하는 것을 특징으로 할 수 있다.
일 실시예에 있어서, 상기 생존 경로 기반 가비지 검출 단계(S300)는 상기 불안전 객체의 생존 경로 탐색 실패 시, 상기 방문 객체 목록에 포함된 모든 객체를 가비지로 판별하는 것을 특징으로 할 수 있다.
일 실시예에 있어서, 상기 생존 경로 기반 가비지 검출 단계(S300)는 상기 불안전 객체의 생존 경로 탐색 성공 시, 발견된 생존 경로를 하나 또는 다수의 구간으로 나누어 각 구간 별로 시작점 객체를 포함하는 단축 경로 정보를 생성하고 저장하는 단축 경로 생성 단계(S400); 를 더 포함 할 수 있다.
일 실시예에 있어서, 상기 단축 경로 정보를 생성하는 단계(S400)는 상기 불안전 객체의 생존 경로에 포함된 객체 중 단축 경로 정보를 가지지 않은 객체들로 연이어 연결된 미단축 구간을 추출하는 단계;와 상기 미단축 구간의 시작점 객체 정보를 포함하는 새로운 단축 경로 정보를 생성하는 단계; 상기 미단축 구간의 시작점 객체를 제외한 상기 미단축 구간에 속한 객체들의 단축 경로 정보를 상기 생성된 단축 경로 정보로 설정하는 단계를 포함하는 것을 특징으로 할 수 있다.
일 실시예에 있어서, 상기 생존 경로 기반 가비지 검출 단계(S300)는 상기 단축 경로 정보를 가진 객체의 생존 경로를 탐색하고자 하는 경우, 상기 객체 대신에 상기 단축 경로의 시작점 객체의 생존 경로를 탐색하는 단계;와 상기 단축 경로의 시작점 객체의 생존 경로가 존재하면, 상기 단축 경로에 속한 모든 객체의 생존 경로 또한 존재하는 것으로 판단하는 단계;와 상기 상기 단축 경로의 시작점 객체의 생존 경로 탐색에 실패하면, 상기 단축 경로 정보를 더 이상 사용하지 못하도록 무효화하는 단계;를 더 포함 할 수 있다.
일 실시예에 있어서, 상기 참조 정보 변경 단계(S100)는, 한 객체와 상기 객체의 생존 경로에 포함된 안전 참조자 간의 참조 연결이 끊어지면, 상기 객체가 포함된 단축 경로 정보를 더 이상 사용하지 못하도록 무효화하는 단계;를 더 포함하는 것을 특징으로 할 수 있다.
일 실시예에 있어서, 상기 생존 경로 기반 가비지 검출 단계(S300)는 객체의 기반 참조수가 0이고, 상기 객체의 참조자가 모두 가비지 객체로 판별된 경우, 상기 객체를 가비지로 판별하는 단계를 포함하는 것을 특징으로 할 수 있다.
본 발명은 가비지 판별 속도를 높여 가비지 컬렉션 실행으로 인한 응용 프로그램 실행 속도 감소를 최소화한다.
본 발명은 보다 빠르게 가비지 객체의 메모리를 회수하여 메모리 활용성을 높임으로써 메모리 용량이 작은 시스템에서도 응용 프로그램을 보다 원활히 수행할 수 있도록 한다.
도 1 은 본 발명의 일 실시예에 따른 가비지 컬렉션 방법을 나타내는 순서도이다.
도 2 는 본 발명의 일 실시예에 따른 변수 변경 정보를 나타내는 구성도이다.
도 3 은 본 발명의 일 실시예에 따른 객체 참조 정보를 나타내는 구성도이다.
도 4 는 본 발명의 일 실시예에 따른 단축 경로 정보를 나타내는 구성도이다.
도 5 는 일 실시예에 따른 가비지 컬렉터를 사용하는 컴퓨터 시스템의 구성도이다.
도 6 은 본 발명의 일 실시예에 따른 참조 정보 변경 단계(S100) 를 나타내는 순서도이다.
도 7 은 본 발명의 일 실시예에 불안전 객체 분류 단계(S200)을 설명하기 위한 순서도이다.
도 8 은 본 발명의 일 실시예에 따른 생존 경로 기반 가비지 검출 단계(S300)를 나타내는 순서도이다.
도 9 는 본 발명의 일 실시예에 따른 생존 경로 탐색 단계(S340)를 설명하기 위한 순서도이다.
도 10 은 객체의 생존 경로를 설명하기 위한 도면이다.
도 11 은 객체의 안전 참조자 정보를 이용하여 생존 경로 정보를 저장한 상태를 나타내는 도면이다.
도 12 는 생존 경로 탐색 과정을 설명하기 위한 도면이다.
도 13 는 생존 경로 탐색을 통해 순환 가비지를 판별하는 과정을 설명하기 위한 도면이다
도 14 는 단축 경로를 설명하기 위한 도면이다.
이하, 첨부된 도면들을 참조하여 바람직한 실시예를 첨부된 도면을 참조하여 설명한다. 이 과정에서 도면에 도시된 선들의 두께나 구성요소의 크기 등은 설명의 명료성과 편의상 과장되게 도시되어 있을 수 있다. 또한, 후술되는 용어들은 본 발명에서의 기능을 고려하여 정의된 용어들로써 이는 사용자, 운용자의 의도 또는 관례에 따라 달라질 수 있다. 그러므로, 이러한 용어들에 대한 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야 할 것이다.
또한, 하기 실시예는 본 발명의 권리범위를 한정하는 것이 아니라 단지 예시로 제시하는 것이며, 본 기술 사상을 통해 구현되는 다양한 실시예가 있을 수 있다.
기본 용어의 정리
객체, 객체 참조 변수
본 실시예는 자동화된 메모리 관리가 가능한 '가비지 자동 수집 가능 구조체'를 '객체'라 정의한다.
객체의 주소값을 저장할 수 있는 변수, 즉 가비지 자동 수집 가능 구조체의 주소를 저장할 수 있는 변수를 '객체 참조 변수'라 정의한다.
기반 참조수, 기반 객체, 줄기 객체
객체에 포함되지 않은 객체 참조 변수를 '기반 변수'라 정의한다. 로컬 변수와 전역 변수 및 가비지 자동 수집이 불가능한 정보 구조체에 포함된 멤버 변수들이 기반 변수에 해당한다.
객체 X를 참조하는 기반 변수의 수를 X의 '기반 참조수'라 정의한다.
기반 참조수가 1 이상인 객체를 '기반 객체'라 정의하고, 기반 참조수가 0인 객체를 '줄기 객체'라 정의한다.
도 10을 참조하면, 전역 변수 1 과 2, 로컬변수 1 등 3 개가 기반 변수에 해당한다. 객체 1은 전역 변수 1 에 의해 참조된 기반 객체이며, 기반 참조수는 1 이다. 객체 2는 로컬 변수 1 과 전역 변수 2 등 2 개의 기반 변수에 의해 참조된 기반 객체이며, 기반 참조수는 2 이다. 객체 1 과 2를 제외한 나머지 객체는 모두 기반 참조수가 0인 줄기 객체에 해당한다.
본 실시예에서는 기반 객체 여부를 판별하기 위하여 기반 참조수 정보를 사용한다. 이에, 기반 객체 판별만 가능하다면, 기반 참조수 값이 기반 변수의 개수와 일치하지 않아도 무관하며, 기반 참조수를 증감하는 하는 단위 및 방법에 대한 제약은 없다. 단지, 객체의 기반 참조수 값을 0과 비교하여 기반 객체 여부를 판별할 수 있어야 한다.
참조 연결
객체 X의 멤버 변수에 객체 Y의 주소를 저장한 경우, X는 Y를 참조하고, Y는 X에 의해 참조된다고 표현한다. 이 때, X를 Y의 '참조자(referrer)'라 하고, Y를 X의 '피참조자(referent)'라 정의한다.
참조자-피참조자 관계를 가진 두 객체를 잇는 가상의 연결선을 '참조 연결'이라 정의한다.
참조 연결은 방향성을 가진다. 참조자에서 피참조자로 향하는 것을 '순방향'이라 정의하고, 피참조자에서 참조자로 향하는 것을 '역방향'이라 정의한다.
도 10을 참조하면, 도면의 화살표 방향이 순방향에 해당한다. 화살표의 출발점에 해당하는 객체가 참조자이고, 화살표가 가리키는 객체가 피참조자에 해당한다.
본 실시예에서는, 한 객체가 그 자신을 참조하는 경우, 즉 한 객체의 멤버 변수에 객체 자신의 주소값이 저장된 경우는 참조 연결로 취급하지 않는다. 즉, 객체는 그 자신의 참조자나 피참조자가 될 수 없다.
경로 탐색
두 객체 X와 Y를 연결하는 가상의 경로를 객체 X와 Y의 '연결 경로'라 정의한다. 두 객체 간의 연결 경로는 1개 이상 존재하거나 없을 수 있다.
두 객체 간의 연결 경로를 탐색하는 것을 '경로 탐색'이라 정의한다.
순방향으로 참조 연결을 추적하여 연결 경로를 찾는 것을 '순방향 경로 탐색'이라 정의하고, 역방향으로 참조 연결을 추적하여 연결 경로를 찾는 것을 '역방향 경로 탐색'이라 정의한다.
도 10를 참조하면, 객체 1과 객체 7과의 연결 경로 탐색 시, 화살표를 따라 객체 1, 3, 4, 7 의 순서로 객체를 추적하는 것이 순방향 경로 탐색에 해당하고, 화살표의 역방향인 객체 7, 4, 3, 1 순서로 객체를 추적하는 것이 역방향 경로 탐색에 해당한다.
순환 참조와 순환 가비지
한 객체에서 출발하여 다른 객체를 하나 이상 경유하여 출발점으로 되돌아오는 폐곡선 연결 경로를 '순환 경로'라 정의한다. 두 객체를 경유하는 순환 경로는 하나도 없거나 1개 이상일 수 있다.
순환 경로에 속한 모든 객체는 서로 '순환 연결'되었다고 정의한다.
가비지 객체 중 다른 가비지 객체와 순환 연결된 객체를 '순환 가비지'라 정의한다. 기존의 참조수 계산 방식은 순환 가비지를 검출하지 못하는 문제가 있다.
생존 경로
객체 X와 기반 객체를 연결하는 외줄 연결 경로를 객체 X의 '생존 경로'라 정의한다.
도 10를 참조하면, 객체 9의 생존 경로는 총 2개이다. 첫번째는 객체 2, 8, 9 를 포함하는 경로이고, 두번째는 객체 1, 3, 4, 7, 8, 9 를 포함하는 경로이다.
기반 객체는 항상 생존 경로를 가진 것으로 간주한다. 즉, 기반 객체 X의 생존 경로는 X가 출발점이자 종료점인 경로에 해당한다.
기반 객체와 연결되지 않은 줄기 객체, 즉 생존 경로가 존재하지 않는 줄기 객체는 가비지 객체에 해당한다.
불안전 객체
가비지 판별이 필요한 객체 즉, 생존 경로 존재 여부가 확인되지 않은 줄기 객체를 '불안전 객체'라 정의한다.
안전 참조자
객체의 참조자 중 생존 경로가 존재하는 것이 확인된 참조자를 '안전 참조자(safe referrer)'라 정의 한다. 경로 탐색을 통해 확인된 객체 X의 생존 경로에 포함된 X의 참조자가 X의 '안전 참조자'에 해당한다.
생존 경로 발견 시, 발견된 생존 경로에 포함된 각 객체의 안전 참조자 정보를 저장함으로써, 각 객체의 생존 경로 정보를 저장할 수 있다.
도 11은 각 객체 당 1 개의 안전 참조자 정보를 저장하여 각 객체 당 1 개의 생존 경로 정보를 저장한 상태를 나타내는 도면이다. 도면 상의 모든 줄기 객체마다 1 개의 안전 참조자를 지정하고, 안전 참조자를 통해 연결된 생존 경로를 실선으로 표시하였다. 화살표의 출발점에 있는 객체가 화살표가 가리키는 객체의 안전 참조자에 해당한다.
도 11을 참조하면, 객체 9의 생존 경로 중 객체 9, 8, 2 를 연결하는 생존 경로 정보가 저장된 상태임을 알 수 있다. 즉, 객체 9의 안전 참조자는 객체 8 이고, 객체 8의 안전 참조자는 객체 2 이다.
단축 경로
생존 경로 발견 시 발견된 생존 경로를 하나 또는 다수의 구간으로 나누고, 각 구간 별로 시작점 객체 및 종료점 객체의 정보를 저장한 것을 '단축 경로(safe shortcut)' 라 정의한다.
도 14 는 도 13 에 도시된 생존 경로를 다수의 구간으로 나눠 단축 경로를 생성한 상태를 나타낸 것으로 각각의 단축 경로를 구분하기 위하여 실선과 점선을 번갈아 사용하였다.
도 14 를 참조하면, 단축 경로 1은 객체 1에서 시작하여 객체 3, 4, 7 을 연결하는 실선에 해당하고, 단축 경로 2는 객체 4에서 시작하여 객체 5, 6 을 연결하는 점선에 해당한다. 단축 경로 3은 객체 2에서 시작하여 객체 8, 9, 10, 11 을 연결하는 실선으로, 단축 경로 4는 객체 10에서 시작하여 객체 12, 13을 연결하는 점선으로 표시하였다.
가비지 컬렉션 시스템 및 정보 구조
도 2는 본 발명의 일 실시예에 따른 변수 변경 정보를 나타내는 구성도이다.
도 2에 도시된 바와 같이, 변수 변경 정보(210) 에는 새로이 변수에 저장된 객체의 주소인 참조 증가 객체(211)와 해당 변수가 변경되기 직전에 해당 변수에 그 주소값이 저장되어 있던 참조 감소 객체(212)에 대한 정보를 포함한다.
객체의 멤버 변수를 변경하는 경우에는 해당 멤버 변수를 소유한 참조자 객체(213)에 대한 정보도 추가적으로 포함한다.
도 3은 본 발명의 일 실시예에 따른 객체 참조 정보를 나타내는 구성도이다.
도 3을 참조하면, 각 객체의 참조 정보(220)는 기반 객체 여부를 판별하기 위한 기반 참조수(221) 정보, 해당 객체를 참조하는 참조자 객체들에 대한 정보를 저장하는 참조자 목록(222) 정보를 포함할 수 있다.
이에 더하여, 객체 참조 정보(220)는 해당 객체의 생존 경로에 포함된 참조자 정보를 저장하는 안전 참조자(223), 해당 객체를 경유하는 단축 경로 정보 구조체를 가리키는 단축 경로(224)를 포함할 수 있다.
도 4는 본 발명의 일 실시예에 따른 단축 경로 정보를 나타내는 구성도이다.
도 4를 참조하면, 단축 경로 정보(230)에는 단축 경로의 시작점 객체(231)와 단축 경로의 종료점 객체(232), 단축 경로 추적 상태를 저장하기 위한 추적 상태(233) 정보를 포함할 수 있다.
추적 상태(233)가 true이면, 해당 단축 경로를 경유하는 경로를 '추적 중' 임을 나타내고, false 이면, '추적 종료' 된 상태임을 나타낸다.
참고로, 상기 구조체는 본 실시예를 설명하기 위해 필요한 정보의 내용을 나열한 것이다. 본 발명을 구현하는 실제 자료 구조는 다양한 형태로 정보를 축약해서 저장할 수 있으며, 상기 구성도와 구조가 상이할 수 있다.
상기 객체와 구조체를 Java 언어의 표현법을 이용하여 수도 코드로 표현하면 아래와 같다. 참고로, 객체 참조 정보(220)의 일부 또는 전부를 객체 외부에 저장할 수도 있으나, 설명의 용이성을 위해 아래의 수도 코드는 객체 참조 정보(220) 모두를 각 객체 별로 내장하는 형식을 취하였다.
/* 객체 및 객체 참조 정보(220) */
abstract class GCObject {
static final SafeShortcut INVALID_SHORTCUT = new SafeShortcut();
static Vector<GCObect> earlyDetectedUnsafeObjects = new Vector<>()
/* 기반 참조수 정보(221) */
int rootReference;
/* 참조자 목록 정보(222) */
Vector<GCObject> referrerList = new Vector<>();
/* 안전 참조자 정보(223) */
GCObject safeReferrer;
/* 단축 경로 정보(224) */
SafeShortcut safeShortcut = INVALID_SHORTCUT;
}
/* 단축 경로 정보(230) */
class SafeShortcut {
/* 시작 객체 정보(231) */
GCObject startObj;
/* 종료 객체 정보(232) */
GCObject endObj;
/* 추적 상태(233) */
boolean inTracing;
/*단축 경로 무효화 */
void invalidate() { startObj = null; }
/*단축 경로 유효성 검증 */
boolean isValid() { return startObj != null; }
}
/* 응용 프로그램 언어별 런타임. (120) */
class LangRuntime {
/* 실시간 가비지 컬렉션 가능 여부*/
static final boolean ENABLE_REALTIME_GC;
/* 가비지 객체를 메모리에서 삭제한다. */
static void deallocObject(GCObject garbage) {...}
/* 지정된 객체의 피참조자 객체 목록 반환 */
static List<GCObject> getReferents(GCObject referrer) {...}
}
본 발명에서는 이해를 용이하기 위하여 다수의 수도코드를 기재하였다. 기재된 수도 코드는 구현되는 언어에 따라 다양하게 변형될 수 있고, 본 실시예에서 설명하는 것은 발명의 내용을 구현하는 하나의 형태에 해당하며, 실질적으로 코드 자체의 내용이 발명의 전체 내용 또는 청구항의 내용을 제한하는 데에 사용되어서는 안된다.
전체적인 가비지 컬렉션 과정
도 1은 본 발명의 일 실시예에 따른 가비지 컬렉션 방법을 나타내는 순서도이다.
본 발명은 생존 경로 존재 여부를 검사하여 가비지 객체를 검출하는 가비지 컬렉션 방법에 관한 것으로 생존 경로 정보를 저장하고 관리함으로써 생존 경로 탐색 횟수를 최소화하고 생존 경로 탐색을 더욱 빠르게 처리하는 것이 특징이다.
도 1을 참조하면, 본 실시예에 따른 가비지 컬렉션 방법은 참조 정보 변경 단계(S100), 불안전 객체 분류 단계(S200), 생존 경로 기반 가비지 검출 단계(S300), 단축 경로 생성 단계(S400), 가비지 처리 단계(S500)를 포함한다.
참조 정보 변경 단계(S100)는 변경된 객체 참조 변수와 관련된 객체들의 참조 정보를 변경한다. 기반 변수가 변경된 경우에는 객체의 기반 참조수(221)를 변경하고, 객체의 멤버 변수가 변경된 경우에는 객체의 참조자 목록(222) 및 안전 참조자(223) 정보를 변경한다.
기반 참조수(221)는 기반 객체 여부를 판별하기 위하여 사용되고, 참조자 목록(222)은 역방향 생존 경로 탐색을 위하여 사용된다.
불안전 객체 분류 단계(S200)는 가비지 판별이 필요한 객체를 분류한다. 본 발명은 각 객체의 생존 경로 정보를 저장하는 과정과, 생존 경로 정보가 없는 줄기 객체를 불안전 객체로 분류하는 과정을 특징적으로 수행한다.
생존 경로 기반 가비지 검출 단계(S300)는 불안전 객체의 생존 경로 탐색과 동시에 가비지 객체를 검출하는 단계이다.
객체 X의 참조자 중 1 개라도 생존 경로가 존재하는 참조자가 있는 경우, X는 가비지 객체가 아니다. 즉, X가 가비지라면, 객체 X의 모든 참조자들도 가비지이다. 본 발명은 이러한 원리를 이용하여 생존 경로 탐색과 가비지 객체 선별 과정을 동시에 처리하는 과정을 특징적으로 수행한다.
보다 구체적으로, 생존 경로 기반 가비지 검출 단계(S300) 내에서 수행하는 생존 경로 탐색 단계(S340)는 불안전 객체의 생존 경로를 역방향으로 탐색하면서, 경로 탐색 동안 추적한 모든 객체를 방문 객체 목록에 저장하고, 발견된 생존 경로 정보를 저장한다.
불안전 객체의 생존 경로 탐색에 실패하면, 방문 객체 목록에 포함된 모든 객체를 가비지로 판명하고, 가비지 처리 단계(S500)로 이행하여 가비지 처리 과정을 수행한다.
불안전 객체의 생존 경로 탐색에 성공한 경우엔, 단축 경로 생성 단계(S400)로 이행하여 해당 생존 경로에 대한 단축 경로 정보(230)를 생성한다.
단축 경로 정보(230) 는 각 객체의 생존 경로 탐색을 보다 빠르게 수행하기 위하여 사용된다, 각 객체의 생존 경로를 하나 또는 다수의 구간으로 나누어, 해당 구간의 시작점 객체(231)와 종료점 객체(232) 정보 등을 저장한 단축 경로 정보(230)를 생성하고, 해당 단축 경로를 경유하는 경로를 탐색할 때, 단축 경로에 속한 객체들을 건너 뛰고 해당 단축 경로에 연결된 다른 단축 경로(230) 또는 객체를 추적할 수 있게 함으로써 경로 탐색 시간을 줄일 수 있다.
가비지 컬렉터 구성
도 5는 본 발명의 일 실시예에 따른 가비지 컬렉터를 사용하는 컴퓨터 시스템의 구성도이다.
도 5를 참조하면, 본 발명의 실시예에 따른 가비지 컬렉터를 사용하는 컴퓨터 시스템은 가비지 컬렉터(110), 런타임 시스템(120), OS(130) 및 실행 코드(140)를 포함한다.
실행 코드(140)는 프로그래머가 작성한 코드를 가리키며, 런타임 시스템(120)은 응용 프로그램 생성시 기본으로 탑재되는 기반 프로그램을 가리키는 것으로 OS 종속적인 메모리 관리 시스템과 인터프리터 등을 포함한다.
본 발명에 따른 가비지 컬렉터를 사용하는 컴퓨터 시스템이 구동되는 순서를 개략적으로 설명하면, 먼저 실행 코드(140)에서 변수 변경 요청을 런타임 시스템(120)으로 전달한다. 런타임 시스템(120)은 변수의 변경 직전 또는 직후에 변수 변경과 관련된 객체들의 정보를 모은 변수 변경 정보(210)를 가비지 컬렉터(110)로 전달한다. 가비지 컬렉터(110)는 변수 변경 정보를 분석하여 객체 참조 정보(220)를 변경하고, 객체 참조 정보(220)를 바탕으로 가비지 객체를 검출하여 런타임 시스템(120)에 가비지 객체 해제를 요청한다.
런타임 시스템(120)은 OS(130)를 통하여 블록 단위로 메모리(131)를 할당 받고 이를 다시 반환하는 처리를 한다. 실행 코드(140) 및 런타임 시스템(120)은 CPU를 통하여 메모리를 참조하고 변경하는데, 이때 CPU는 메모리의 일부를 내부의 캐시 메모리(132)로 복사하여 보다 빠르게 메모리를 참조할 수 있도록 한다. 런타임 시스템이 사용하는 메모리 블록의 총량을 줄일 수록, 메모리(131) 사용 효율성 및 CPU 캐시 메모리(132) 사용 효율성을 높여 응용 프로그램의 실행 속도를 향상시킬 수 있다.
(a) 참조 정보 변경 단계(S100)
도 6 은 본 발명의 일 실시예에 따른 참조 정보 변경 단계(S100)에서 수행하는 변수 변경 정보 처리 과정을 나타내는 순서도이다
참조 정보 변경 단계(S100)에서는 참조 증가 객체(211) 정보와 참조 감소 객체(212) 정보의 유효성을 판단한 후, 각각 참조 추가 단계(S120~S122)와 참조 삭제 단계(S140~S144)를 실행한다.
본 실시예에서는 참조 증가 객체(211)와 참조 감소 객체(212)가 null 이 아니고, 참조자 객체(213)와 동일하지 않은 경우, 해당 객체를 유효한 것으로 판단한다.
아래는 본 발명의 실시예에 따른 참조 정보 변경 단계(S100)에서 변수 변경 정보(210)를 처리하는 과정을 나타내는 수도 코드이다.
/* 참조 정보 변경 단계(S100) */
static void processVariableReplacement(
GCObject assigned, /* 참조 증가 객체(211) */
GCObject deassigned, /* 참조 감소 객체(212) */
GCObject referrer /* 참조자 객체(213) */
) {
if (assigned != null && assigned != referrer) {
/* 참조 추가 단계(S120) 수행 */
addReference(assigned, referrer);
}
if (deassigned != null && deassigned != referrer) {
/* 참조 삭제 단계(S140) 수행 */
removeReference(deassigned, referrer);
}
}
도 6을 참조하면, 참조 추가 단계(S120~S122)는 참조 증가 객체(211)의 참조 정보(220) 를 변경하는 단계이다.
참조자 객체(213) 정보가 없는 경우에는 기반 참조 증가 단계(S121)를 수행하고, 참조자 객체(213) 정보가 유효하면 참조 연결 추가 단계(S122)를 수행한다.
기반 참조 증가 단계(S121)는 참조 증가 객체의 기반 참조수 (221) 값을 증가시킨다.
참조 연결 추가 단계(S122)는 참조 증가 객체(211)의 참조자 목록(222)에 참조자 객체(213) 정보를 추가한다.
아래는 참조 추가 단계(S120~S122)를 나타내는 수도 코드이다.
static void addReference(
GCObject assigned, /* 참조 증가 객체(211) */
GCObject referrer /* 참조자 객체(213) */
) {
if (referrer == null) {
/* 기반 참조 증가 단계(S121) */
assigned.rootReference++;
}
else {
/* 참조 연결 추가 단계(S122) */
assigned.referrerList.add(referrer);
}
}
도 6을 참조하면, 참조 삭제 단계(S140~S144)는 참조 감소 객체(212)의 참조 정보(220) 를 변경하는 단계이다.
참조자 객체(213) 정보가 없는 경우에는 기반 참조 감소 단계(S121)로 이행하고, 참조자 객체(213) 정보가 유효하면 참조 연결 삭제 단계(S122)로 이행한다.
기반 참조 감소 단계(S141)는 참조 감소객체(212)의 기반 참조수(221) 값을 감소시키고, 참조 삭제 단계를 종료한다.
참조 연결 삭제 단계(S142)는 참조 감소 객체(212)의 참조자 목록(222)에서 참조자 객체(213) 정보를 삭제한다.
참조 감소 객체(212)와 참조 감소 객체(212)의 안전 참조자(223) 간 참조 연결이 단절된 경우, 생존 경로 정보 소거 단계(S144) 를 실행한다.
생존 경로 정보 소거 단계(S144) 에서는 참조 감소 객체(212)의 안전 참조자 정보(223)를 소거하고, 참조 감소 객체(212)가 포함된 단축 경로 정보(224)를 무효화한다.
단축 경로 무효화란 단절된 단축 경로 정보(230)를 더 이상 사용하지 않도록 표시하는 것을 의미한다. 본 실시예에서는 참조 감소 객체(212)가 포함된 단축 경로(224) 의 시작 객체(231) 의 값을 null 로 변경함으로써 해당 단축 경로(230)를 무효화한다.
참조 감소 객체(212)의 참조 정보 변경을 완료한 후, 불안전 객체 분류 단계(S200)로 이행한다.
아래는 참조 삭제 단계(S140~S144)를 나타내는 수도 코드이다.
static void removeReference(
GCObject deassigned, /* 참조 감소 객체(212) */
GCObject referrer /* 참조자 객체(213) */
) {
if (referrer == null) {
/* 기반 참조 감소 단계(S141) */
deassigned.rootReference--;
}
else {
/* 참조 연결 삭제 단계(S142) */
deassigned.referrerList.remove(referrer);
if (deassigned.safeReferrer == referrer) /* S143*/ {
/* 생존 경로 정보 소거 단계(S144) */
deassigned.safeReferrer = null;
deassigned.safeShortcut.invalidate();
}
}
/* 불안전 객체 분류 단계(S200)로 이행 */
detectUnsafeObject(deassigned);
}
(b) 불안전 객체 분류 단계(S200)
도 7 은 불안전 객체 분류 단계(S200)의 수행과정을 나타내는 순서도이다.
불안전 객체 분류(S200) 단계에서는 생존 경로 존재 여부가 불확실한 객체, 즉 가비지 판별이 필요한 객체를 분류한다.
본 발명은 생존 경로 발견 시 각 객체의 생존 경로를 구성하는 안전 참조자(223) 정보를 저장하는 과정과, 안전 참조자(223) 정보가 없는 줄기 객체, 즉 생존 경로 정보가 없는 줄기객체를 불안전 객체로 분류하는 과정을 특징적으로 수행한다. 본 발명은 생존 경로 정보를 가진 객체의 생존 경로를 재탐색하지 않음으로써, 생존 경로 탐색 횟수를 최소화한다.
본 실시예 따른 불안전 객체 분류(S200) 단계는 객체의 기반 참조수(221)의 값이 0이고, 안전 참조자(223)가 NULL인 경우, 해당 객체를 불안전 객체로 판별한다.
모든 변수의 변경 정보를 실시간으로 수집할 수 있는 경우에는 불안전 객체 판별과 동시에 생존 경로 기반 가비지 검출 단계(S300) 로 수행함으로써, 실시간으로 가비지를 검출하는 가비지 컬렉션 시스템을 구성할 수 있다.
단, 일부 런타임 시스템(120)은 로컬 변수의 변경 사항에 대한 정보를 실시간으로 가비지 컬렉터(110)에 전달하지 않을 수 있다. 이러한 경우에는, 응응 프로그램의 스택을 스캔하여 로컬 변수에 의해 참조된 모든 객체를 마킹한 후에 비동기적으로 가비지 컬렉션 처리를 하여야 한다.
비동기적 가비지 컬렉션을 실행하는 경우에는 불안전 객체 분류 단계(S200)를 두 단계로 나누어 처리한다. 먼저, 변수 변경과 동시에 불안전 객체를 판별(S220)하여 불안정 객체 목록에 저장(S222)함으로써 1차적으로 불안정 객체를 분류한다.
이후, 런타임 시스템(120) 또는 가비지 컬렉터(110) 는 주기적으로 기반 객체 마킹 단계(S240)를 수행하여 응응 프로그램의 스택 내에 있는 로컬 변수에 의해 참조된 객체들의 기반 참조수(221)를 변경하여 기반 객체임을 알 수 있도록 마킹 한다.
2차 불안전 객체 분류 단계(S260)는 불안정 객체 목록에 저장된 객체들에 대해서 최종적으로 불안전 객체 여부를 판별하여 생존 경로 기반 가비지 검출 단계(S300)를 수행한다.
아래는 불안전 객체 분류 단계(S200)에 해당하는 수도 코드이다. 참고로, 스택을 스캔하여 로컬 변수에 의해 참조된 객체를 마킹 하는 방식은 경로 추적 방식에서 일반적으로 사용되는 방식이므로 이에 대한 별도 설명과 예시는 생략한다.
/* 불안전 객체 판별 */
static boolean isUnsafeObject(
GCObject obj
) {
return obj.rootReference == 0 && obj.safeReferrer == null;
}
static void earlyDetectUnsafeObject(
GCObject deassigned /* 참조 감소 객체(212) */
) {
/* 불안전 객체 판별 */
if (isUnsafeObject(deassigned)) /* (S220) */ {
if (LangRuntime.ENABLE_REALTIME_GC) /* (S221) */ {
/* 생존 경로 기반 가비지 검출 단계(S300)로 이행*/
processGarbageDetection(deassigned);
}
else {
/* 불안정 객체 목록 추가(S222)*/
earlyDetectedUnsafeObjects.add(deassigned);
}
}
}
/* 비동기적 가비지 컬렉션 함수 */
static void processAsyncGarbageCollection() {
/* 기반 객체 마킹 단계 (S240) */
markLocalRootObjects();
/* 불안전 객체 2차 분류 단계(S260) */
for (GCObject obj : earlyDetectedUnsafeObjects) {
/* 불안전 객체 재판별 */
if (isUnsafeObject(obj)) /* S261 */ {
/* 생존 경로 기반 가비지 검출 단계(S300) 수행 */
processGarbageDetection(obj);
}
}
}
(d) 생존 경로 기반 가비지 검출 단계(S300)
도 8은 생존 경로 기반 가비지 검출 단계(S300)를 나타내는 순서도이다. 생존 경로 기반 가비지 검출 단계(S300)는 생존 경로 탐색 준비 단계(S320) 와 생존 경로 탐색 단계(S340), 생존 경로 탐색 결과 처리 단계(S360)를 수행한다.
생존 경로 탐색 준비 단계(S320)는 생존 경로 탐색 단계(S340) 에서 사용할 방문 객체 목록을 생성한다. 방문 객체 목록은 생존 경로 탐색 단계(S340) 수행 도중 동일 객체에 대한 생존 경로 탐색을 중복 수행하는 것을 방지함과 동시에, 생존 경로 탐색 실패 시 가비지 객체의 목록을 파악하기 위한 용도로 사용된다.
생존 경로 탐색 단계(S340)는 불안전 객체의 생존 경로를 탐색하는 단계이다. 생존 경로 탐색 시 상기 방문 객체 목록에 추적하는 모든 객체의 목록을 저장하고, 생존 경로 발견 시 객체의 안전 참조자(223)를 통해 생존 경로 정보를 저장한다..
생존 경로 탐색 결과 처리 단계(S360)는 생존 경로 탐색 결과에 따라 단축 경로 생성 단계(S400) 또는 가비지 처리 단계(S500)를 수행하는 단계이다.
불안전 객체의 생존 경로 탐색(S340)에 실패하면, 생존 경로 탐색 결과 처리 단계(S360)는 상기 방문 객체 목록에 포함된 모든 객체를 가비지로 판별하고, 가비지 처리 단계(S500)로 이행한다.
불안전 객체의 생존 경로 탐색(S340)에 성공하면, 생존 경로 탐색 결과 처리 단계(S360)는 단축 경로 생성 단계(S400)로 이행하여 불안전 객체를 기점으로 하는 생존 경로에 대한 단축 경로 정보를 생성한다.
생존 경로 기반 가비지 검출 단계(S300)를 수도 코드로 표현하면 아래와 같다.
static void processGarbageDetection(
GCObject unsafeObj) {
/* 생존 경로 탐색 준비 단계(S320) */
Vector<GCObject> visitedNodes = new Vector(); // 방문 객체 목록
/* 생존 경로 탐색 단계(S340) 수행 */
boolean hasSurvivalPath = findSurvivalPath(unsafeObj, visitedNodes);
/* 생존 경로 탐색 결과 처리 단계(S360) */
if (hasSurvivalPath) {
/* 단축 경로 생성 단계(S400) 로 이행 */
constructShortcut(unsafeObj);
} else {
/* 가비지 처리 단계(S500)로 이행 */
deallocGarbageObjects(visitedNodes);
}
}
(e) 생존 경로 탐색 단계(S340)
도 9 는 생존 경로 탐색 단계(S340)를 나타내는 순서도이다. 생존 경로 탐색 단계(S340)는 기반 객체 여부 확인 단계(S341), 방문 객체 목록 추가 단계(S342), 단축 경로 추적 단계(S344~S347), 역방향 경로 추적 단계(S348~S351) 및 생존 경로 정보 저장 단계(S352) 를 포함할 수 있다.
기반 객체 여부 확인 단계(S341)는 추적 객체가 기반 객체인 경우 생존 경로 탐색 성공값을 반환한다. 본 실시예에 따르면, 기반 객체는 기반 객체 하나만으로 이루어진 생존 경로를 가지는 것으로 간주하므로, 기반 객체에 대한 생존 경로 탐색은 항상 성공한다.
방문 객체 목록 추가 단계(S342)는 방문 객체 목록에 추적 객체를 추가한다.
추적 객체의 단축 경로(224) S의 유효성을 판단(S343)하여, 단축 경로 S가 유효한 경우, 단축 경로 추적 단계(S344~S347)를 수행하여 상기 단축 경로 S를 경유하는 생존 경로를 먼저 탐색한다.
단축 경로 추적 상태 확인 단계(S344) 는 단축 경로 S의 추적 상태(233) 값을 검사하여 단축 경로 S 가 현재 추적 중인 상태인가를 확인한다. 단축 경로 S가 현재 추적 중인 상태인 경우, 즉 해당 단축 경로를 경유하는 순환 경로가 형성된 경우, 해당 단축 경로를 경유하는 생존 경로 정보가 유효하지 않은 것이므로, 단축 경로 정보 소거 단계(S347) 로 이행한다.
단축 경로 시작점 객체의 생존 경로 탐색 단계(S345)는, 추적 객체가 속한 단축 경로 S의 시작점 객체(231)에 대한 생존 경로 탐색 단계(S340)를 재귀적으로 수행하는 단계이다. 단축 경로 S의 추적 상태(233) 값을 추적 중(true)인 상태로 변경한 후, 시작점 객체(231)의 생존 경로를 탐색한다. 시작점 객체(231)의 생존 경로 탐색 완료 후 단축 경로의 추적 상태(233)를 추적 종료(false) 값으로 변경한다.
단축 경로 시작점 객체의 생존 경로 탐색 결과를 검사하여(S346), 성공한 경우 성공값을 반환하고, 실패한 경우 단축 경로 정보 소거 단계(S347) 로 이행한다. 시작점 객체(231)의 생존 경로 탐색 성공 시, 단축 경로에 포함된 모든 객체의 생존 경로도 존재하는 것이므로, 경로 탐색을 빠르게 처리할 수 있다.
단축 경로 정보 소거 단계(S347) 는 해당 단축 경로 정보가 더 이상 사용되지 않도록 단축 경로 S를 무효화하고, 역방향 경로 추적 단계(S348~S351)로 이행한다.
단축 경로 정보가 유효하지 않거나, 단축 경로를 통한 생존 경로 탐색에 실패한 경우, 역방향 경로 추적 단계(S348~S351)를 수행한다.
역방향 경로 추적 단계(S348~S351)는 추적 객체의 참조자 목록(222)에 포함된 참조자 R을 순차적으로 취하여(S348), 중복 추적 회피 단계(S349)와 참조자 생존 경로 탐색 단계(S350) 및 참조자 생존 경로 탐색 결과 검사 단계(S351) 를 반복적으로 실행한다.
중복 추적 회피 단계(S349) 는 참조자 R 이 방문 객체 목록에 포함되었는가를 검사하고, 방문 객체 목록에 포함된 경우 참조자 R에 대한 생존 경로 탐색 단계(S350)을 실행하지 않음으로써, 동일 객체를 두 번 이상 추적하는 것을 방지한다.
참조자 R의 생존 경로 탐색 단계(S350)는 참조자 R 에 대한 생존 경로 탐색 단계(S340)를 재귀적으로 수행하는 단계이다. 참조자 R의 생존 경로 탐색 결과를 검사하여(S351), 생존 경로 탐색에 성공한 경우, 생존 경로 정보 저장 단계(S352)로 이행하여 추적 객체의 안전 참조자(223)를 R로 변경하고, 성공값을 반환한다.
상기 역방향 경로 추적 단계(S348~S351)를 통해 생존 경로가 존재하는 참조자를 발견하지 못한 경우, 실패값을 반환한다.
아래는 생존 경로 탐색 단계(S340)를 나타내는 수도 코드이다.
static boolean findSurvivalPath(
GCObject tracingNode, // 추적 객체
Vector<GCObject> visitedNodes // 방문 객체 목록
) {
/* 기반 객체 확인 단계(S341) */
if (tracingNode.rootReference > 0) /* S341*/ {
/* 생존 경로 탐색 성공값 반환 */
return true;
}
/* 방문 객체 목록 추가 단계(S342). */
visitedNodes.add(tracingNode);
SafeShortcut S = tracingNode.safeShortcut;
if (S.isValid()) /* (S343) */ {
/* 단축 경로 추적 단계(S344~S347) */
if (!S.inTracing) /* (S344) */{
/* 단축 경로 시작점 객체의 생존 경로 탐색(S345) */
S.inTracing = true;
boolean survivalPathFound = findSurvivalPath(S.startObj, visitedNodes);
S.inTracing = false;
if (survivalPathFound) /* (S346) */{
/* 생존 경로 탐색 성공값 반환 */
return true;
}
}
/* 단축 경로 무효화(S347) */
S.invalidate();
}
/* 역방향 경로 추적 단계(S348~S351) */
for (GCObject R : tracingNode.referrerList) /* (S348) */ {
/* 중복 추적 회피 단계(S349) */
if (visitedNodes.contains(R)) {
continue;
}
/* 참조자 R의 생존 경로 탐색 단계 (S350) */
boolean survivalPathFound = findSurvivalPath(R, visitedNodes);
if (survivalPathFound) /* (S351) */ {
/* 생존 경로 정보 저장 단계 (S352) */
tracingNode.safeReferrer = R;
/* 생존 경로 탐색 성공값 반환 */
return true;
}
}
/* 실패값 반환 */
return false;
}
도 12는 생존 경로 탐색 과정을 설명하기 위한 도면이다.
생존 경로 탐색 단계(S340)는 추적 객체의 참조자에 대한 생존 경로 탐색 단계(S340)을 재귀적으로 실행하여 생존 경로 탐색에 성공한 참조자를 안전 참조자로 선택하는 재귀적 과정이다. 이에 본 실시예의 생존 경로 탐색 단계(S340)는 함수 내부에서 자신을 호출하는 재귀적 함수로 구현하였다.
도 12는 도 11에 도시된 객체 8과 객체 2의 참조 연결이 끊어진 경우, 객체 8의 생존 경로를 탐색하여 객체 8과 객체 9등 객체 8의 후미에 연결된 객체들의 생존 경로를 재설정한 결과를 도시한 것이다.
도 12를 참조하면, 객체 8의 생존 경로 탐색 과정은, 객체 8의 참조자인 객체 7의 생존 경로를 탐색하는 T1, 객체 7의 참조자인 객체 4의 생존 경로를 탐색하는 T2, 객체 4의 참조자인 객체 3의 생존 경로를 탐색하는 T3, 객체 3의 참조자인 객체 6의 생존 경로를 탐색하는 T4, 객체 6의 참조자인 객체 5의 생존 경로를 탐색하는 T5 순서로 생존 경로 탐색 함수가 실행된다
이어, 객체 5의 유일한 참조자인 객체 4가 방문 객체 목록에 포함되었으므로 실패값을 반환하는 F6, 객체 6의 유일한 참조자인 객체 5의 생존 경로 탐색에 실패하였으므로 실패값을 반환하는 F7을 실행한다.
이어, 객체 3의 다른 참조자인 객체 1의 생존 경로를 탐색하는 T8이 실행되고, 객체 1은 기반 객체이므로 성공값을 반환하는 R9가 실행된다.
이어, 생존 경로가 존재하는 참조자를 안전 참조자(223)로 지정하고, 성공값을 반환하는 과정이 R10, R11, R12 순서로 실행되어, 객체 8의 새로운 생존 경로인 객체 1, 3, 4, 7, 8을 포함하는 생존 경로 정보를 안전 참조자(223)을 통해 저장하고, 생존 경로 탐색 과정을 완료한다.
도 13은 생존 경로 기반 가비지 검출 단계(S300)을 통해 순환 가비지를 검출하는 과정을 설명하기 위한 도면이다.
도 13은 도 11 에 게시된 객체 8 과 9 의 연결이 끊어진 상태를 보여주는 것으로, 객체 9 부터 13까지 5개 객체 모두 기반 객체와 연결하는 생존 경로가 없는 가비지 객체임을 알 수 있다. 상기 객체 중 객체 9, 10, 12, 13 은 서로 순환 연결된 순환 가비지에 해당한다.
도 13을 참조하면, 본 발명은 객체 8과 9의 연결이 끊어지면, 안전 참조자인 객체 8과 연결이 끊어진 객체 9를 불안전 객체로 분류하고, 객체 9를 기점으로 객체의 참조 연결을 역방향으로 탐색하여 기반 객체와 연결된 생존 경로를 탐색한다.
본 발명은 생존 경로를 탐색하는 동안 추적한 모든 객체를 방문 객체 목록에 저장하고, 가비지 객체의 참조자 또한 가비지 객체라는 원리, 즉 줄기 객체의 모든 참조자가 가비지이면, 상기 줄기 객체 또한 가비지 객체라는 원리를 이용하여 생존 경로 탐색과 동시에 가비지 객체를 검출하는 과정을 특징적으로 수행한다.
구체적으로, 객체 9의 생존 경로 탐색 과정은 객체 9의 참조자인 객체 13, 객체 13의 참조자인 객체 12, 객체 12의 참조자인 10 순서로 진행되며, 각 과정에서 추적하는 객체를 방문 객체 목록에 저장한다. 마지막으로 객체 10의 유일한 참조자인 객체 9는 이미 방문 객체 목록에 저장되어 있으므로, 기반 객체에 도달하지 못한 채 생존 경로 탐색이 실패하게 된다.
불안전 객체인 객체 9의 모든 참조자에 대한 생존 경로 탐색이 실패하면, 방문 객체 목록에 저장된 객체 9, 13, 12, 10 을 가비지로 판별하여 가비지 처리 단계(S500)를 실행한다. 객체 10을 가비지 처리하는 과정에서 객체 10과 11의 참조 연결 정보가 삭제되며, 이에 따라 객체 11 또한 불완전 객체로 분류된 후, 가비지 처리 단계(S500)가 연쇄적으로 수행된다.
(f) 단축 경로 생성 단계(S400)
도 14는 단축 경로 정보 생성 과정을 설명하기 위한 도면이다.
단축 경로 생성 단계(S400)는 생존 경로 탐색 단계(S340)에서 발견된 생존 경로를 하나 또는 다수의 구간으로 나누어 단축 경로 정보를 생성한다.
본 실시예에서는 생존 경로 탐색 단계(S340)에서 발견된 생존 경로에 포함된 객체 중 유효한 단축 경로 정보(230)을 가지지 않는 객체들을 모아 새로운 단축 경로 정보(230)를 생성하고, 해당 단축 경로에 포함된 객체 중 시작점 객체(231)를 제외한 다른 객체들의 단축 경로(224)에 해당 단축 경로 정보(230)의 주소를 저장한다.
도 14를 참조하면, 객체 7에서 부터 역방향으로 객체 1에 이르는 생존 경로가 최초로 발견된 경우, 해당 생존 경로에 속한 객체 7, 4, 3, 1 은 모두 유효한 단축 경로 정보가 없으므로, 객체 1을 시작점 객체(231)로 하는 새로운 단축 경로 1을 생성하고, 시작 객체인 객체 1을 제외한 상기 객체들의 단축 경로(224)에 단축 경로 1의 주소값을 저장한다. 이후 객체 6과 객체 1을 연결하는 생존경로가 발견된 경우, 해당 경로에 속한 객체 6, 5, 4, 3, 1 객체 중 단축 경로에 포함되지 않은 객체 6과 5를 하나의 단축 경로 2로 묶고, 단축 경로 2의 시작점 객체(231)을 객체 4로 설정하고, 객체 5와 6의 단축 경로(224)에 단축 경로 2의 주소값을 저장한다.
본 실시예에 따르면, 새로이 생성된 단축 경로의 시작점 객체(231)는 다른 단축 경로에 포함된 객체이거나, 기반 객체이다. 도 14를 참조하면, 단축 경로 2의 시작점 객체(231)인 객체 4는 단축 경로 2가 아닌, 단축 경로 1에 포함된 객체이고, 단축 경로 4의 시작점 객체(231)인 객체 10은 단축 경로 3에 포함된 객체이다.
단축 경로는 단축 경로 내의 다른 객체에 대한 추적을 생략하고, 단축 경로의 시작점 또는 종료점 객체만을 추적하여 생존 경로를 빠르게 탐색하기 위하여 사용된다.
본 발명의 일 실시예에 따른 단축 경로는 안전 참조자를 통해 연결된 생존 경로의 일부 구간에 해당하므로, 단축 경로의 시작점 객체의 생존 경로가 존재하면 단축 경로에 포함된 모든 객체의 생존 경로 또한 존재하게 된다. 본 발명은 이러한 원리를 이용하여 단축 경로 내의 다른 객체에 대한 추적을 생략하고, 단축 경로의 시작점 또는 종료점 객체만을 추적하여 단축 경로에 포함된 객체의 생존 경로를 빠르게 탐색하는 과정을 특징적으로 수행한다.
도 14를 참조하면, 객체 13의 생존 경로 존재 여부를 확인하는 경우, 객체 13이 속한 단축 경로 4의 시작점인 객체 10, 객체 10이 속한 단축 경로 2의 시작점인 객체-2를 추적하여 객체 13과 기반 객체 2를 연결하는 생존 경로를 빠르게 탐색할 수 있다.
단축 경로 정보를 이용하면 도 12에 도시된 불안전 객체 8의 생존 경로 탐색 과정을 더욱 빠르게 처리할 수 있다. 도 14를 참조하면 객체 8의 참조자인 객체 7은 단축 경로 1에 포함되어 있음을 알 수 있다. 도 12를 다시 참조하면, 객체 8은 객체 7 대신에 객체 7인 속한 단축 경로의 시작점 객체인 객체 1의 생존 경로를 탐색하여 객체 7의 생존 경로 존재 여부를 빠르게 확인할 수 있다. 객체 1은 기반 객체이므로, 객체 1과 연결된 단축 경로 1에 속한 객체 7 또한 생존 경로를 가지고 있음을 확인할 수 있다. 이어 객체 7을 객체 8의 안전 참조자로 지정함으로써 객체 8의 생존 경로 탐색 과정을 빠르게 종료할 수 있다.
본 발명의 일 실시예에 따른 단축 경로 생성 단계는 발견된 생존 경로 중 단축 경로(224) 정보를 가지지 않은 객체들로 연이어 이어진 미단축 구간을 추출하는 단계, 미단축 구간의 시작점 객체 정보를 가진 단축 경로 정보를 생성하는 단계, 시작점 객체를 제외한 미단축 구간에 속한 객체들의 단축 경로(224) 에 새로 생성된 단축 경로 정보를 저장하는 단계로 이루어진다.아래는 단축 경로 생성 단계(S400)에 해당하는 수도 코드이다. 안전 참조자로 이어진 객체의 생존 경로를 역방향으로 추적하면서, 단축 경로 정보가 유효하지 않은 객체들로 연이어 연결된 구간을 찾아내어 새로운 단축 경로 정보(230)를 생성한다.
Static void constructShortcut(
GCObject obj
) {
SafeShortcut newShortcut = null;
while (obj.rootReference == 0) {
if (!obj.safeShortcut.isValid()) {
if (newShortcut == null) {
newShortcut = new SafeShortcut();
}
obj.safeShortcut = newShortcut;
obj = obj.safeReferrer;
} else {
if (newShortcut != null) {
newShortcut.startObj = obj;
newShortcut = null;
}
obj = obj.safeShortcut.startObj;
}
}
}
(g) 가비지 처리 단계(S500)
가비지 처리 단계(S500)는 생존 경로 탐색 기반 가비지 판별 단계(S500)에서 판별한 가비지 객체들에 대한 가비지 처리 절차를 수행하는 단계이다.
가비지 처리 단계(S500)는 가비지 객체를 삭제하기 전에 가비지 객체와 가비지 객체의 피참조자 객체들 간의 참조 연결 정보를 삭제한 후, 런타임 시스템(120)에 객체 해제를 요청한다. 피참조자들의 참조 연결 정보를 삭제하는 과정에서 가비지 객체의 피참조자 중 일부가 불완전 객체로 판별되어, 생존경로 탐색(S300) 및 가비지 처리 과정(S500)이 연쇄적으로 처리될 수 있다.
아래는 가비지 처리 단계(S500)의 처리 과정을 예시한 수도 코드이다.
static void deallocGarbageObjects(Vector<GCObject> garbageList) {
for (GCObject garbage : garbageList) {
deallocGarbage(garbage);
}
}
static void deallocGarbage(GCObject garbage) {
for (GCObject referent : LangRuntime.getReferents(garbage)) {
/* 가비지 객체와 피참조 객체의 참조 연결 정보를 삭제한다 */
removeReference(referent, garbage);
}
/* 런타임 시스템(120)에 객체 해제를 요청 */
LangRuntime.deallocObject(garbage);
}
실제 적용되는 예시 다이어그램
이상에서 설명된 본 발명의 일 실시 예는 예시적인 것에 불과하며, 본 발명이 속한 기술분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시 예가 가능하다는 점을 잘 알 수 있을 것이다. 그러므로 본 발명은 상기의 상세한 설명에서 언급되는 형태로만 한정되는 것은 아님을 잘 이해할 수 있을 것이다. 따라서 본 발명의 진정한 기술적 보호 범위는 첨부된 특허청구범위의 기술적 사상에 의해 정해져야 할 것이다. 또한, 본 발명은 첨부된 청구범위에 의해 정의되는 본 발명의 정신과 그 범위 내에 있는 모든 변형물과 균등물 및 대체물을 포함하는 것으로 이해되어야 한다.
본 발명은 가비지 판별 속도를 높여 가비지 컬렉션 실행으로 인한 응용 프로그램 실행 속도 감소를 최소화하는 소프트웨어 분야에 적용될 수 있다.
본 발명은 보다 빠르게 가비지 객체의 메모리를 회수하여 메모리 활용성을 높임으로써 메모리 용량이 작은 시스템에서도 응용 프로그램을 보다 원활히 수행할 수 있도록 하여, 모바일 또는 제한적인 시스템을 사용하는 웨어러블 장치에서도 적용될 수 있다.

Claims (14)

  1. 객체 참조 변수의 변경에 따라 각 객체의 기반 참조수, 참조자 객체 목록 및 안전 참조자에 대한 정보를 변경하는 참조 정보 변경 단계(S100);
    기반 참조수가 0인 객체 중 상기 안전 참조자에 대한 정보가 존재하지 않는 객체를 가비지 판별이 필요한 불안전 객체로 분류하는 불안전 객체 분류 단계(S200);
    상기 불안전 객체와 기반 객체를 연결하는 생존 경로를 역방향으로 탐색하여 가비지 객체를 검출하는 생존 경로 기반 가비지 검출 단계(S300);
    상기 생존 경로 기반 가비지 검출 단계에서 검출된 가비지 객체들을 처리하는 가비지 처리 단계(S500);
    를 포함하는 가비지 컬렉션 방법.
  2. 제1항에 있어서,
    상기 참조 정보 변경 단계(S100)는,
    기반 변수에 한 객체의 주소값이 저장되면, 상기 객체의 기반 참조수 값을 증가시키는 단계;
    기반 변수에 저장된 한 객체의 주소값이 지워지면, 상기 객체의 기반 참조수 값을 감소시키는 단계;
    를 포함하는 가비지 컬렉션 방법
  3. 제1항에 있어서,
    상기 참조 정보 변경 단계(S100)는,
    상기 객체를 참조하는 객체를 참조자 객체라고 하고, 상기 객체를 피참조자 객체라고 할 때에,
    상기 참조자 객체의 멤버 변수에 상기 피참조자 객체의 주소값이 저장되면, 상기 피참조자 객체의 참조자 목록에 참조자 객체에 대한 정보를 추가하는 단계;
    상기 참조자 객체의 멤버 변수에 저장된 상기 피참조자 객체의 주소값이 지워지면, 상기 피참조자 객체의 참조자 목록에서 참조자 객체에 대한 정보를 삭제하는 단계;
    를 포함하는 것을 특징으로 하는 가비지 컬렉션 방법
  4. 제1항에 있어서,
    상기 생존 경로 기반 가비지 검출 단계(S300)는
    객체의 참조자 중 각 객체의 생존 경로 상에 위치한 상기 안전 참조자에 대한 정보를 각 객체 별로 저장함으로써 상기 객체의 생존 경로 정보를 저장하는 단계;
    를 포함하는 가비지 컬렉션 방법
  5. 제1항에 있어서,
    상기 참조 정보 변경 단계(S100)는,
    상기 객체와 상기 객체의 상기 안전 참조자 간 참조 연결이 끊어지면, 상기 객체의 안전 참조자 정보를 소거하는 단계;
    를 포함하는 것을 특징으로 하는 가비지 컬렉션 방법
  6. 제 1항에 있어서
    상기 불안전 객체 분류 단계(S200)는,
    상기 객체 참조 변수의 변경 직후, 상기 객체의 기반 참조수가 0이고, 상기 안전 참조자가 지정되지 않은 상태가 되면, 상기 객체를 상기 불안전 객체로 분류하는 것을 특징으로 하는 가비지 컬렉션 방법
  7. 제 1항에 있어서,
    상기 불안전 객체 분류 단계(S200)는,
    상기 객체 참조 변수의 변경 직후, 상기 객체의 기반 참조수가 0이고, 상기 안전 참조자가 지정되지 않은 상태가 되면, 상기 객체를 불안정 객체 목록에 저장하는 단계;
    주기적으로 응용 프로그램의 스택에 포함된 로컬 변수를 조사하여 로컬 변수에 의해 참조된 객체의 기반 참조수를 변경하는 단계;
    상기 불안정 객체 목록에 포함된 객체 중 기반 참조수가 0이고, 상기 안전 참조자가 지정되지 않은 객체를 상기 불안전 객체로 판별하는 단계;
    를 포함하는 것을 특징으로 하는 가비지 컬렉션 방법.
  8. 제1항에 있어서,
    상기 생존 경로 기반 가비지 검출 단계(S300)는
    상기 불안전 객체의 생존 경로를 역방향으로 탐색하는 동안 추적한 모든 객체를 방문 객체 목록에 저장하는 단계;
    더 포함하는 것을 특징으로 하는 가비지 컬렉션 방법
  9. 제 8항에 있어서
    상기 생존 경로 기반 가비지 검출 단계(S300)는
    상기 불안전 객체의 생존 경로 탐색 실패 시, 상기 방문 객체 목록에 포함된 모든 객체를 가비지로 판별하는 것을 특징으로 하는 가비지 컬렉션 방법.
  10. 제 1항에 있어서,
    상기 생존 경로 기반 가비지 검출 단계(S300)는
    상기 불안전 객체의 생존 경로 탐색 성공 시, 발견된 생존 경로를 하나 또는 다수의 구간으로 나누어 각 구간 별로 시작점 객체를 포함하는 단축 경로 정보를 생성하고 저장하는 단축 경로 생성 단계(S400);
    를 더욱 포함하는 가비지 컬렉션 방법.
  11. 제 10항에 있어서,
    상기 단축 경로 생성 단계(S400)는
    상기 불안전 객체의 생존 경로 중 단축 경로 정보를 가지지 않은 객체들로 연이어 연결된 미단축 구간을 추출하는 단계;
    상기 미단축 구간의 시작점 객체 정보를 포함하는 새로운 단축 경로 정보를 생성하는 단계;
    상기 미단축 구간의 시작점 객체를 제외한 상기 미단축 구간에 속한 객체들의 단축 경로 정보를 상기 생성된 새로운 단축 경로 정보로 설정하는 단계;
    를 포함하는 것을 특징으로 하는 가비지 컬렉션 방법.
  12. 제 10 항에 있어서,
    상기 생존 경로 기반 가비지 검출 단계(S300)는
    상기 단축 경로 정보를 가진 객체의 생존 경로를 탐색하고자 하는 경우, 상기 객체 대신에 상기 단축 경로의 시작점 객체의 생존 경로를 탐색하는 단계;와
    상기 단축 경로의 시작점 객체의 생존 경로가 존재하면, 상기 단축 경로에 속한 모든 객체의 생존 경로 또한 존재하는 것으로 판단하는 단계;
    상기 단축 경로의 시작점 객체의 생존 경로 탐색에 실패하면, 상기 단축 경로 정보를 더 이상 사용하지 못하도록 무효화하는 단계;
    를 더 포함하는 가비지 컬렉션 방법.
  13. 제 10항에 있어서,
    상기 참조 정보 변경 단계(S100)는,
    한 객체와 상기 객체의 생존 경로에 포함된 안전 참조자 간의 참조 연결이 끊어지면, 상기 객체가 포함된 단축 경로 정보를 더 이상 사용하지 못하도록 무효화하는 단계;
    를 더 포함하는 것을 특징으로 하는 가비지 컬렉션 방법.
  14. 제 1항에 있어서,
    상기 생존 경로 기반 가비지 검출 단계(S300)는
    객체의 기반 참조수가 0이고, 상기 객체의 참조자가 모두 가비지 객체로 판별된 경우, 상기 객체를 가비지로 판별하는 단계;
    를 포함하는 것을 특징으로 하는 가비지 컬렉션 방법.
PCT/KR2022/018275 2021-12-14 2022-11-18 생존 경로 정보 기반 가비지 컬렉션 방법 WO2023113267A1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR10-2021-0178596 2021-12-14
KR1020210178596A KR102453983B1 (ko) 2021-12-14 2021-12-14 생존 경로 정보 기반 가비지 컬렉션 방법

Publications (1)

Publication Number Publication Date
WO2023113267A1 true WO2023113267A1 (ko) 2023-06-22

Family

ID=83802805

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/KR2022/018275 WO2023113267A1 (ko) 2021-12-14 2022-11-18 생존 경로 정보 기반 가비지 컬렉션 방법

Country Status (2)

Country Link
KR (1) KR102453983B1 (ko)
WO (1) WO2023113267A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102453983B1 (ko) * 2021-12-14 2022-10-31 인터와이즈 주식회사 생존 경로 정보 기반 가비지 컬렉션 방법

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140131978A (ko) * 2012-07-27 2014-11-14 인텔 코오퍼레이션 메모리 관리를 위한 시스템 및 방법
KR20150089746A (ko) * 2014-01-28 2015-08-05 한국전자통신연구원 자바스크립트의 메모리 관리 장치 및 그 방법
JP2016526717A (ja) * 2013-06-12 2016-09-05 エグザブロックス・コーポレーション ハイブリッドガベージコレクション
KR20190058706A (ko) * 2011-09-09 2019-05-29 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 사이클 그래프에서 객체 수명을 관리하는 기법
KR102194413B1 (ko) * 2020-06-18 2020-12-23 인터와이즈 주식회사 역방향 경로 탐색을 이용한 혼합형 가비지 컬렉션 방법 및 이를 이용하는 가비지 컬렉션 시스템
KR102453983B1 (ko) * 2021-12-14 2022-10-31 인터와이즈 주식회사 생존 경로 정보 기반 가비지 컬렉션 방법

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190058706A (ko) * 2011-09-09 2019-05-29 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 사이클 그래프에서 객체 수명을 관리하는 기법
KR20140131978A (ko) * 2012-07-27 2014-11-14 인텔 코오퍼레이션 메모리 관리를 위한 시스템 및 방법
JP2016526717A (ja) * 2013-06-12 2016-09-05 エグザブロックス・コーポレーション ハイブリッドガベージコレクション
KR20150089746A (ko) * 2014-01-28 2015-08-05 한국전자통신연구원 자바스크립트의 메모리 관리 장치 및 그 방법
KR102194413B1 (ko) * 2020-06-18 2020-12-23 인터와이즈 주식회사 역방향 경로 탐색을 이용한 혼합형 가비지 컬렉션 방법 및 이를 이용하는 가비지 컬렉션 시스템
KR102453983B1 (ko) * 2021-12-14 2022-10-31 인터와이즈 주식회사 생존 경로 정보 기반 가비지 컬렉션 방법

Also Published As

Publication number Publication date
KR102453983B1 (ko) 2022-10-31
KR102453983B9 (ko) 2023-06-19

Similar Documents

Publication Publication Date Title
WO2020138844A1 (en) Home appliance and method for voice recognition thereof
WO2016089009A1 (en) Method and cloud server for managing device
WO2023113267A1 (ko) 생존 경로 정보 기반 가비지 컬렉션 방법
WO2015139232A1 (zh) 一种应用的推荐方法、系统及服务器
WO2015115817A1 (en) Method and apparatus for performing handover of user equipment in wireless communication system supporting dual connectivity
WO2020222539A1 (en) Hub device, multi-device system including the hub device and plurality of devices, and method of operating the same
WO2017209583A1 (en) Method and apparatus for communicating in wireless communication system
WO2015093870A1 (en) Method and device for managing data
WO2013070022A9 (en) Apparatus and method for transmitting and receiving a quasi-cyclic low density parity check code in a multimedia communication system
WO2017188749A9 (ko) Ic 칩 테스트 장치, ic 칩 테스트 방법, 및 ic 칩 테스트 시스템
WO2021215589A1 (ko) Ocr 기반 문서 분석 시스템 및 방법
WO2022181961A1 (ko) 신호 처리 장치, 및 이를 구비하는 차량용 디스플레이 장치
WO2024005464A1 (ko) 데이터 클리닉 방법, 데이터 클리닉 방법이 저장된 컴퓨터 프로그램 및 데이터 클리닉 방법을 수행하는 컴퓨팅 장치
WO2021075910A1 (en) Electronic device and method for operating screen capturing by electronic device
WO2014196710A1 (ko) 클라우드 스토리지 관리 시스템, 클라우드 스토리지 관리 방법 및 이를 위한 장치
WO2021242063A1 (ko) 초음파 투과 장치 및 파동 제어 방법
WO2012093746A1 (ko) 규칙 서버와 규칙 실행 단말기가 분리된 규칙기반 규칙추론 장치 및 방법
WO2016148377A1 (ko) 광고플랫폼장치
WO2013185625A1 (en) Information processing system, information processing method and memory system
WO2014003225A1 (en) Touch panel, position sensing method of touch panel, and integrated circuit
WO2019022334A1 (ko) 패리티 검사 연접 극 부호화기
WO2017209362A1 (ko) 단말간 데이터 이체 시 백업 데이터를 이용한 추천 컨텐츠 제공 장치 및 이를 이용한 방법
WO2020251261A1 (en) Method for updating model, apparatus, electronic device and computer readable storage medium
WO2023136374A1 (ko) 신호 처리 장치, 및 이를 구비하는 차량용 디스플레이 장치
WO2023113078A1 (ko) 신호 처리 장치, 및 이를 구비하는 차량용 디스플레이 장치

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 22907737

Country of ref document: EP

Kind code of ref document: A1