Java valodā, atmiņas pārvaldība ir būtisks process. To automātiski pārvalda Java. JVM sadala atmiņu divās daļās: kaudze atmiņa un kaudzes atmiņa. No Java viedokļa abas ir svarīgas atmiņas zonas, taču abas tiek izmantotas dažādiem mērķiem. The galvenā atšķirība starp steka atmiņu un kaudzes atmiņu ir tas, ka steku izmanto, lai saglabātu metodes izpildes secību un vietējos mainīgos, savukārt kaudzes atmiņā tiek glabāti objekti un tiek izmantota dinamiskā atmiņas piešķiršana un atdalīšana. Šajā sadaļā mēs detalizēti apspriedīsim atšķirības starp kaudzi un kaudzi.
Stack Memory
Steka atmiņa ir fiziska vieta (RAM), kas izpildes laikā ir piešķirta katram pavedienam. Tas tiek izveidots, kad tiek izveidots pavediens. Atmiņas pārvaldība stekā atbilst LIFO (Last-In-First-Out) secībai, jo tā ir pieejama globāli. Tas saglabā mainīgos lielumus, atsauces uz objektiem un daļējus rezultātus. Atmiņa ir piešķirta steka dzīves laikam, līdz funkcija atgriežas. Ja nav vietas jaunu objektu izveidei, tas izmetjava.lang.StackOverFlowError. Elementu darbības joma ir ierobežota ar to pavedieniem. The JVM izveido atsevišķu kaudzi katram pavedienam.
Kaudzes atmiņa
Tas tiek izveidots, kad tiek startēts JVM, un lietojumprogramma to izmanto tik ilgi, kamēr lietojumprogramma darbojas. Tajā tiek glabāti objekti un JRE klases. Ikreiz, kad mēs veidojam objektus, tas aizņem vietu kaudzes atmiņā, kamēr šī objekta atsauce tiek izveidota kaudzē. Tas neatbilst nevienai kārtībai, piemēram, kaudzei. Tas dinamiski apstrādā atmiņas blokus. Tas nozīmē, ka atmiņa nav jāapstrādā manuāli. Lai automātiski pārvaldītu atmiņu, Java nodrošina atkritumu savācēju, kas izdzēš objektus, kas vairs netiek izmantoti. Atmiņa, kas piešķirta kaudzēm, dzīvo līdz kādam notikumam, vai nu programma tiek pārtraukta, vai nenotiek atmiņas atbrīvošana. Lietojumprogrammā elementi ir pieejami globāli. Tā ir kopīga atmiņas telpa, kas tiek koplietota ar visiem pavedieniem. Ja kaudzes vieta ir pilna, tas izmetjava.lang.OutOfMemoryError. Kaudzes atmiņa ir sadalīta šādos atmiņas apgabalos:
- Jaunā paaudze
- Izdzīvotāju telpa
- Vecā paaudze
- Pastāvīgā paaudze
- Koda kešatmiņa
Nākamajā attēlā parādīts steka atmiņas un kaudzes vietas sadalījums.
Atšķirība starp kaudzes un kaudzes atmiņu
Šajā tabulā ir apkopotas visas galvenās atšķirības starp steka atmiņu un kaudzes vietu.
Parametrs | Stack Memory | Kaudzes telpa |
---|---|---|
Pieteikums | Tajā tiek glabāti priekšmeti, kuriem ir ļoti īss kalpošanas laiks, piemēram, metodes, mainīgie, un atsauces mainīgie no objektiem. | Tas uzglabā objektus un Java Runtime Environment ( JRE ) klases. |
Pasūtīšana | No tā izriet LIFO pasūtījums. | Tam nav nekādas secības, jo tā ir dinamiska atmiņas piešķiršana, un tai nav noteikta modeļa atmiņas bloku piešķiršanai un atdalīšanai. |
Elastība | Tas ir nav elastīgs jo mēs nevaram mainīt piešķirto atmiņu. | Tas ir elastīgs jo mēs varam mainīt piešķirto atmiņu. |
Efektivitāte | Tā ir ātrāk piekļuve, piešķiršana un sadalīšana. | Tā ir lēnāk piekļuve, piešķiršana un atdalīšana. |
Atmiņas lielums | Tas ir mazāks izmērā. | Tas ir lielāks izmērā. |
Izmantotās Java opcijas | Mēs varam palielināt steka lielumu, izmantojot JVM opciju -Xss. | Mēs varam palielināt vai samazināt kaudzes atmiņas lielumu, izmantojot opcijas - Xmx un -Xms JVM. |
Redzamība vai darbības joma | Mainīgie lielumi ir redzami tikai īpašnieka pavedienam. | Tas ir redzams visiem pavedieniem. |
Kosmosa paaudze | Kad pavediens ir izveidots, operētājsistēma automātiski piešķir steku. | Lai lietojumprogrammai izveidotu kaudzes vietu, valoda izpildes laikā vispirms izsauc operētājsistēmu. |
Izplatīšana | Katram objektam tiek izveidota atsevišķa kaudze. | Tas tiek koplietots starp visiem pavedieniem. |
Izņēmuma metieni | JVM met java.lang.StackOverFlowError ja kaudzes izmērs ir lielāks par ierobežojumu. Lai izvairītos no šīs kļūdas, palieliniet kaudzes izmēru. | JVM met java.lang.OutOfMemoryError ja JVM nevar izveidot jaunu vietējo metodi. |
Piešķiršana/ sadale | To veic automātiski kompilators . | To veic manuāli programmētājs . |
Izmaksas | Tās izmaksas ir mazāk . | Tās izmaksas ir vairāk salīdzinot ar steku. |
Īstenošana | Tās īstenošana ir grūti . | Tās īstenošana ir viegli . |
Piešķiršanas kārtība | Atmiņas piešķiršana ir nepārtraukts . | Atmiņa ir piešķirta nejauši pasūtījums. |
Pavediens-Drošība | Tas ir drošs pavedienam, jo katram pavedienam ir sava kaudze. | Tas nav pavedienu drošs, tāpēc ir nepieciešama pareiza koda sinhronizācija. |