Junior — Middle
Կարող եք բացատրել, թե ինչ է նշանակում հիշողության արտահոսքը Java լեզվում և ինչու է դա տեղի ունենում:
sobes.tech AI
Պատասխան AI-ից
Java- ում հիշողության արտահոսքը այն իրավիճակն է, երբ ծրագրի համար արդեն անհրաժեշտ չհամարվող օբյեկտները չազատագրվում են գարշահավաքով, քանի որ դրանց վրա դեռևս հղումներ կան։ Նման դեպքում, այդ օբյեկտների զբաղեցրած հիշողությունը չի ազատվում, ինչը կարող է հանգեցնել հիշողության սպառման աճի և վերջում OutOfMemoryError սխալների։
Java- ում հիշողության արտահոսքի պատճառները՝
- Տևական հղումներ այն օբյեկտներին, որոնք արդեն չեն անհրաժեշտ (օրինակ՝ ստատիկ հավաքածուներ, որոնց մեջ ավելացվում են տարրեր, բայց չեն հեռացվում):
- Ներքին կեշեր, որոնք չեն մաքրվում:
- Շարունակական գրանցողներ կամ callback-ներ, որոնք չեն անջատվում և պահում են օբյեկտներ:
Օրինակ՝
List<byte[]> list = new ArrayList<>();
while(true) {
list.add(new byte[1024 * 1024]); // շարունակական ավելացում օբյեկտների ցանկին
}
Այս օրինակով, ցանկը շարունակականորեն մեծանում է, և օբյեկտները չեն կարող հեռացվել գարշահավաքով, ինչը հանգեցնում է հիշողության արտահոսքի։