Junior
Əsas məlumat tiplərinin həmişə yığıncaqda saxlandığı və referens məlumat tiplərinin nümunələrinin yığıncaqda saxlandığı doğrudurmu?
sobes.tech Süni İntellekt
AI-dan cavab
Hər zaman düzgün deyil.
Primitiv məlumat tiplərinin və obyektlərə istinadların saxlanması kontekstdən asılıdır:
-
Yerli dəyişənlər:
- Metodlar daxilində yerli dəyişən kimi elan olunan primitiv məlumat tipləri adətən yığında saxlanılır.
- Yerli dəyişən kimi elan olunan obyekt istinadları da yığında saxlanılır. Obyekt nümunələri isə yerdə yerləşir.
-
Obyektlərin sahələri (nümunə dəyişənləri):
- Obeyektlərin sahəsi olan primitiv məlumat tipləri obyektin özünün bir hissəsi kimi heap-də saxlanılır.
- Digər obyektlərə istinad edən sahələr də obyektin bir hissəsi kimi heap-də saxlanılır. İstinad olunan obyektlər də heap-də yerləşəcək.
-
Statik dəyişənlər:
- Statik dəyişənlər (həm primitiv, həm də istinad tipli) sinif məlumatlarının bir hissəsi kimi yaddaş sahəsində saxlanılır, çox vaxt PermGen (Java 8-dən əvvəl) və ya Metaspace (Java 8 və yuxarı) adlanan sahədə, lakin bu, yerli dəyişənlər üçün çağrı yığını ilə fərqli olaraq nəzəri cəhətdən fərqlidir.
-
Escape Analysis:
- JVM Escape Analysis adlı optimallaşdırmanı tətbiq edə bilər. Əgər JVM müəyyən edərsə ki, metod daxilində yaradılan obyekt bu metoddan "qaçmır" (yəni, xaricdən əlçatan olmur), bu obyekt birbaşa yığında (stack) yerləşdirilə bilər (Scalar Replacement). Bu optimallaşdırma belə obyektlər üçün çöp toplanma xərclərini azaltmağa imkan verir.
Beləliklə, yerli primitiv dəyişənlər və obyekt istinadları yığında saxlanılsa da, obyekt nümunələri həmişə heap-də saxlanılır və obyektin sahələri də obyektlə birlikdə heap-də yerləşir. Escape Analysis kimi optimallaşdırmalar bu davranışı istisna hallarda dəyişə bilər.