Sobes.tech
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 нұсқасына байланысты) орналасқан және интернирленген жолдарды сақтайды, бұл бірдей жолдық литералдарды бірнеше рет қолданғанда жадты үнемдеуге мүмкіндік береді.