Què és l'assignació de memòria a Java? Memòria Stack and Heap



Aquest article basat en 'Assignació de memòria a Java' us ajudarà amb un coneixement detallat sobre l'assignació de memòria juntament amb les estructures de dades Stack and Heap.

Assignació de memòria és un procés mitjançant el qual els programes i serveis informàtics s’assignen físics o virtuals memòria espai. En aquest article, coneixerem l 'assignació de memòria a i parlarem de la memòria Stack and Heap.

Què és la memòria de pila?

La memòria Java Stack s'utilitza per a l'execució d'un fil. Contenen valors específics del mètode de curta durada i referències a altres objectes de l’emmagatzematge dinàmic que s’està derivant del mètode.





Pila sempre es fa referència a la memòria LIFO (Últim-Primer-Sortit) ordre. Sempre que s’invoca un mètode, es crea un nou bloc a la memòria de la pila perquè el mètode contingui els valors primitius locals i faci referència a altres objectes del mètode.

Tan bon punt finalitza el mètode, el bloc queda inutilitzat i queda disponible per al següent mètode.



barra de progrés en html mitjançant javascript

La mida de la memòria en pila és molt inferior en comparació amb la memòria Heap.

Característiques clau de la memòria de pila

A part del que hem comentat fins ara, a continuació es presenten algunes altres característiques de Pila memòria:

  • Creix i es redueix a mesura que es criden i tornen nous mètodes respectivament
  • Les variables dins de la pila només existeixen mentre s’executa el mètode que les ha creat
  • És així automàticament assignat i repartit quan el mètode acaba l'execució
  • Si aquesta memòria està plena, Java llança java.lang.StackOverFlowError
  • L’accés a aquesta memòria és ràpid en comparació amb la memòria heap
  • Aquest record és aptes per a fils ja que cada fil funciona a la seva pròpia pila

Mètodes a la classe Stack

  • Empenta d'objectes ( Element objecte ): Insereix un element a la part superior de la pila.
  • Pop objecte (): Elimina i retorna l'element superior de la pila. An 'EmptyStackException' es produeix una excepció si anomenem pop () quan la pila d'invocació està buida.
  • Peek object (): Retorna l'element situat a la part superior de la pila, però no l'elimina.
  • Booleà buit (): Es torna cert si no hi ha res a la part superior de la pila. En cas contrari, torna fals.
  • int search ( Element objecte ): Determina si existeix un objecte a la pila. Si es troba l'element, retorna la posició de l'element des de la part superior de la pila. Altrament, torna -1.

Codi Java per a la implementació de pila

import java.io. * import java.util. * class Test {static void stack_push (Stack stack) {per (int i = 0 i<5 i++){ stack.push(i) } } static void stack_pop(Stack stack){ System.out.println('Pop :') for(int i = 0 i < 5 i++){ Integer y = (Integer) stack.pop() System.out.println(y) } } static void stack_peek(Stack stack){ Integer element = (Integer) stack.peek() System.out.println('Element on stack top : ' + element) } static void stack_search(Stack stack, int element){ Integer pos = (Integer) stack.search(element) if(pos == -1) System.out.println('Element not found') else System.out.println('Element is found at position ' + pos) } public static void main (String[] args){ Stack stack = new Stack() stack_push(stack) stack_pop(stack) stack_push(stack) stack_peek(stack) stack_search(stack, 2) stack_search(stack, 6) } } 

// Sortida



memory-allocation-in-java

Ara, anem a passar a Heap Space.

Espai amunt a Java

La memòria s’assigna durant l’execució d’instruccions escrites pels programadors. Tingueu en compte que el nom de pila no té res a veure amb l’estructura de dades de pila. Es diu munt perquè és una pila d'espai de memòria disponible per als programadors assignat i de-allocate. Si un programador no maneja bé aquesta memòria, es pot produir una fuga de memòriapassar al programa.

Característiques clau de la memòria Heap de Java

  • A part del que hem comentat fins ara, a continuació es presenten algunes altres característiques de l’espai de muntatge:
  • S'hi accedeix mitjançant tècniques complexes de gestió de memòria que inclouen Generació jove, vella o bé Generació permanent, i Generació permanent
  • Si l'espai de l'emmagatzematge dinàmic està ple, Java llança java.lang.OutOfMemoryError
  • L’accés a aquesta memòria és relativament més lent que la memòria de pila
  • Aquesta memòria, a diferència de la pila, no es reparteix automàticament. Necessita Abocador per alliberar objectes no utilitzats per mantenir l'eficiència en l'ús de la memòria
  • A diferència de la pila, un munt no ho és aptes per a fils i s’ha de protegir sincronitzant correctament el codi

Diferència entre Java Heap Space i Stack Memory

Basant-nos en les explicacions anteriors, podem concloure fàcilment les següents diferències entre Munt i Pila memòria.

  • Munt la memòria la fan servir totes les parts de l'aplicació, mentre que la memòria de pila només la fa servir un fil d'execució.
  • Sempre que es crea un objecte, sempre s’emmagatzema a l’espai Heap i la memòria de la pila en conté la referència. La memòria de pila només conté variables primitives locals i variables de referència als objectes de l'espai amuntegat.
  • Els objectes emmagatzemats a l’emmagatzematge dinàmic són accessibles a tot el món, mentre que la memòria de la pila no pot accedir a altres fils.
  • La gestió de la memòria a la pila es fa en un fitxer LIFO és més complex a la memòria Heap perquè s’utilitza a nivell mundial. La memòria dinàmica es divideix en Generació jove, generació antiga etc, més detalls a Java Garbage Collection.
  • La memòria en pila és vida curta mentre que la memòria dinàmica es manté des del principi fins al final de l'execució de l'aplicació.
  • Podem utilitzar -XMX i -XMS Opció JVM per definir la mida d’inici i la mida màxima de la memòria dinàmica. Podem utilitzar -XSS per definir la mida de la memòria de la pila.
  • Quan la memòria de la pila està plena, s'executa el temps d'execució de Java java.lang.StackOverFlowError mentre que si la memòria de la pila està plena, es llença java.lang.OutOfMemoryError: Espai Heap de Javaerror.
  • La mida de la memòria en pila és molt inferior si es compara amb la memòria Heap. A causa de la simplicitat en l'assignació de memòria (LIFO), la memòria de pila és molt ràpida en comparació ambmemòria acumulativa.

Gràfic comparatiu

PARÀMETRE PILA MUNT
Bàsic La memòria s’assigna en un bloc contiguLa memòria s’assigna en un ordre aleatori
Assignació i desassignació Automàtic per compiladorManual del programador
Cost MenysMés
Implementació DifícilFàcil
Temps d’accés Més ràpidMés lent
Número principal Escassetat de memòriaFragmentació de la memòria
Localitat de Diferència Excel · lentAdequat
Flexibilitat Tarifa fixaEs pot canviar la mida

Amb això, arribem al final d’aquest tutorial sobre “Assignació de memòria a Java”. Espero que hagueu entès el concepte i la seva implementació a través d’alguns exemples en temps real.

Ara que ho has entèsAssignació de memòria a Javainformació bàsica a través d’aquest article sobre “Assignació de memòria a Java” per Edureka, una empresa d'aprenentatge en línia de confiança amb una xarxa de més de 250.000 estudiants satisfets repartits per tot el món. Els cursos de formació i certificació Java J2EE i SOA d’Edureka estan dissenyats per a estudiants i professionals que volen ser desenvolupadors de Java. El curs està dissenyat per donar-vos un avantatge en la programació de Java i formar-vos tant per a conceptes Java bàsics com avançats, juntament amb diversos marcs Java com Hibernate i Primavera .

Tens alguna pregunta? Esmenteu-lo a la secció de comentaris d’aquest bloc “Assignació de memòria a Java” i us respondrem el més aviat possible.