Junior
Оё дуруст аст, ки намудҳои додаҳои ибтидоӣ ҳамеша дар стек нигоҳ дошта мешаванд ва намунаҳои намудҳои додаҳои истинодӣ дар хишт?
sobes.tech AI
Ҷавоб аз AI
Ҳамеша дуруст эмас.
Примитив маълумот турлари ва объектларга ишоралар сақланиши контекстига боғлиқ:
-
Ҳодиса ўзгарувчилари:
- Методлар ичида ҳодиса ўзгарувчиси сифатида эълон қилинган примитив маълумот турлари одатда стекда сақланади.
- Ҳодиса ўзгарувчиси сифатида эълон қилинган объектларга ишоралар ҳам стекда сақланади. Ўзининг ўзи объектлар ҳам кучада жойлашган.
-
Объектлар майдонлари (ўзгарувчилар):
- Объектлар майдонлари бўлган примитив маълумот турлари объектнинг ўзига қисм бўлиб кучада сақланади.
- Бошқа объектларга ишоралар, улар объектлар майдонлари бўлса, ҳам кучада сақланади. Ишора қилинган объектлар ҳам кучада бўлади.
-
Статик ўзгарувчилар:
- Статик ўзгарувчилар (ҳар иккала, примитив ёки ишора тури) класс маълумотлари қисми сифатида ёдлаш жойида сақланади, кўпинча PermGen (Java 8дан олдин) ёки Metaspace (Java 8 ва юқори) деб аталади, аммо бу концептуал жиҳатдан маҳаллий ўзгарувчилар учун чақириш стекидан фарқ қилади.
-
Escape Analysis:
- JVM Escape Analysis номланган оптимизацияни қўллаш мумкин. Агар JVM аниқласа, объект, яратилган методда, бу методдан "қочмайди" (яъни, ташқарида мавжуд бўлмайди), бу объект тўғридан-тўғри стекда ажратилиши мумкин (Scalar Replacement). Бу оптимизация бундай объектлар учун мусаффо йиғиш харажатларини камайтиришга имкон беради.
Шунинг учун, маҳаллий примитив ўзгарувчилар ва объектларга ишоралар стекда сақланса-да, объектлар ўзлари доим кучада сақланади, ва объект майдонлари ҳам кучада объект билан бирга жойлашган. Escape Analysis каби оптимизациялар бу ҳаракатни истисно ҳолатларда ўзгартириши мумкин.