Middle
153
Объектілер жадыда қайда сақталады?
AI-дан жауап
sobes.tech AI
Java/JVM-де объектілер динамикалық жад аймағында — қоқыс (Heap) деп аталатын жерде сақталады. Примитивті деректер түрлері (int, boolean, char және т.б.) және объектілерге сілтемелер стекте (Stack) сақталады, олар әдістердің ішіндегі жергілікті айнымалылар ретінде жарияланған кезде.
Қысқаша:
- Объектілер: Қоқыс (Heap).
- Примитивті типтер және объектілерге сілтемелер жергілікті айнымалылар ретінде: Стек (Stack).
Орналасу мысалы:
// Жергілікті примитивті типті айнымалы — стекте сақталады
int сан = 10;
// Жергілікті сілтеме айнымалысы — стекте сақталады
// String "Hello" объектісі қоқысқа салынады
String хабарлама = new String("Hello");
// Жергілікті сілтеме айнымалысы — стекте де, объекті — қоқыста да
// StringBuilder объектісі қоқысқа салынады
StringBuilder құрастырушы = new StringBuilder();
// Стек арқылы объектіге қол жеткізу
құрастырушы.append("Дүние");
Толығырақ:
| Жад аймағы | Не сақталады | Өмір сүру уақыты |
|---|---|---|
| Қоқыс (Heap) | Барлық жасалған объектілер, массивтер. | Қоқыс жинағышпен анықталады, объектіге актив сілтемелер болмаса, жойылады. |
| Стек (Stack) | Жергілікті айнымалылар, әдіс параметрлері, әдіс шақырулары туралы ақпарат. | Әдістің өмір сүру уақытына байланысты. Әдіс аяқталғанда босатылады. |
| PermGen (Java 8-ге дейін) / Metaspace (Java 8-ден кейін) | Кластардың метадеректері, кластар туралы ақпарат, интернирленген жолдар (PermGen үшін). | JVM және қолданылатын кластарға байланысты. |
| Code Cache | HotSpot JIT компиляторы арқылы жасалған машиналық код. | JVM-ге байланысты. |
Маңызды ескерту, жолдар ерекше мінез-құлыққа ие болуы мүмкін. Жолдар пулы (String Pool) қоқыс аймағында (немесе PermGen/Metaspace, Java нұсқасына байланысты) орналасқан және интернирленген жолдарды сақтайды, бұл бірдей жолдық литералдарды бірнеше рет қолданғанда жадты үнемдеуге мүмкіндік береді.