Middle
Ինչպե՞ս որոշել, թե որ օբյեկտը Java-ում աղբ է։
sobes.tech AI
Պատասխան AI-ից
Java-յում օբյեկտը համարվում է աղբ, երբ նրա վրա այլևս չկա հղում ակտիվ ծրագրի մասերից։ Դա տեղի է ունենում հետևյալ դեպքերում՝
-
Հղումներ չկան ռուտային օբյեկտներից (արմատային հղումներ): Ռուտային օբյեկտները ներառում են հղումներ՝
- ակտիվ թելերի տեղական փոփոխականներից։
- סטատիկ փոփոխականներից։
- JNI հղումներից (օբյեկտներ, որոնք հասանելի են նատիվ կոդից):
-
Միայն այլ "աղբ" օբյեկտներից հղումներ: Թեև օբյեկտ O1-ը հղում է անում օբյեկտ O2-ին, բայց ոչ O1-ը, ոչ O2-ը չունեն ռուտային օբյեկտներից հղումներ, երկուսն էլ համարվում են աղբ։
Օրինակ՝
// Ռուտային հղում ստատիկ փոփոխականից
static Object staticObject = new Object();
// Ռուտային հղում ակտիվ մեթոդի տեղական փոփոխականից
public void someMethod() {
Object localObject = new Object(); // Հղում տեղական փոփոխականից
// someMethod-ից դուրս գալուց հետո, localObject-ը դառնում է անհասանելի
}
// "Աղբ" օբյեկտի օրինակ
public Object createGarbage() {
Object obj1 = new Object();
Object obj2 = new Object();
obj1 = obj2; // obj1 այժմ հղում է անում նույն օբյեկտին, ինչ obj2
// Օրիգինալ օբյեկտը, որի վրա հղում էր անում obj1-ը, այժմ անհասանելի է և համարվում է աղբ
return obj2; // Վերադարձնում է կենդանի օբյեկտի հղում
}
Java-յի գարջ մաքուրիչը որոշում է անհասանելի օբյեկտները՝ օգտագործելով "հասանելիության հետևման" ալգորիթմը (reachability tracing), սկսելով ռուտային օբյեկտներից։ Օբյեկտները, որոնց հասնել հնարավոր չէ ռուտային օբյեկտներից հղումների շղթայով, համարվում են անհասանելի և ենթակա են հավաքագրման։