Java에서 메모리 할당이란 무엇입니까? 스택 및 힙 메모리



'자바의 메모리 할당'에 기반한이 기사는 스택 및 힙 데이터 구조와 함께 메모리 할당에 대한 자세한 지식을 제공합니다.

메모리 할당 컴퓨터 프로그램 및 서비스가 물리적 또는 가상으로 할당되는 프로세스입니다. 기억 우주. 이 기사에서는 메모리 할당에 대해 스택 및 힙 메모리에 대해 설명하겠습니다.

스택 메모리 란?

자바 스택 메모리는 스레드 실행에 사용됩니다. 여기에는 수명이 짧은 메서드 별 값과 메서드에서 참조되는 힙의 다른 개체에 대한 참조가 포함됩니다.





스택 메모리는 항상 참조 LIFO (Last-In-First-Out) 주문. 메서드가 호출 될 때마다 메서드가 로컬 기본 값과 메서드의 다른 개체에 대한 참조를 보유 할 수 있도록 스택 메모리에 새 블록이 생성됩니다.

메서드가 끝나 자마자 블록은 사용되지 않고 다음 메서드에 사용할 수있게됩니다.



스택 메모리 크기는 힙 메모리에 비해 매우 적습니다.

스택 메모리의 주요 기능

지금까지 논의한 내용과 별도로 다음은 스택 기억:

이클립스 설정 방법
  • 새로운 메서드가 각각 호출되고 반환됨에 따라 확장 및 축소됩니다.
  • 스택 내부의 변수는 변수를 생성 한 메서드가 실행되는 동안 만 존재합니다.
  • 이것의 자동으로 메서드 실행이 완료되면 할당 및 할당 해제
  • 이 메모리가 가득 차면 Java는 java.lang.StackOverFlowError
  • 이 메모리에 대한 액세스는 빠른 힙 메모리와 비교할 때
  • 이 기억은 스레드로부터 안전한 각 스레드가 자체 스택에서 작동하므로

Stack 클래스의 메서드

  • 개체 푸시 ( 개체 요소 ) : 스택 맨 위에 요소를 푸시합니다.
  • 개체 pop () : 스택의 최상위 요소를 제거하고 반환합니다. 안 ‘EmptyStackException’ 호출 스택이 비어있을 때 pop ()을 호출하면 예외가 발생합니다.
  • 객체 peek () : 스택 맨 위에있는 요소를 반환하지만 제거하지는 않습니다.
  • 부울 empty () : 스택 맨 위에 아무것도 없으면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.
  • int search ( 개체 요소 ) : 스택에 개체가 있는지 여부를 결정합니다. 요소가 발견되면 스택 맨 위에서 요소의 위치를 ​​반환합니다.. 그렇지 않으면 -1을 반환합니다.

스택 구현을위한 Java 코드

import java.io. * import java.util. * class Test {static void stack_push (스택 스택) {for (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) } } 

//산출



memory-allocation-in-java

이제 힙 공간으로 이동하겠습니다.

자바의 힙 공간

메모리는 프로그래머가 작성한 명령을 실행하는 동안 할당됩니다. 힙이라는 이름은 힙 데이터 구조와 관련이 없습니다. 프로그래머가 사용할 수있는 메모리 공간 더미이기 때문에 힙이라고합니다. 할당할당 해제. 프로그래머가이 메모리를 잘 처리하지 않으면 메모리 누수가 발생할 수 있습니다.프로그램에서 발생합니다.

Java 힙 메모리의 주요 기능

  • 지금까지 논의한 내용과 별도로 힙 공간의 다른 기능은 다음과 같습니다.
  • 다음과 같은 복잡한 메모리 관리 기술을 통해 액세스됩니다. 젊은 세대, 노인 또는 장년 세대,영구 세대
  • 힙 공간이 가득 차면 Java가 java.lang.OutOfMemoryError
  • 이 메모리에 대한 액세스는 스택 메모리보다 상대적으로 느립니다.
  • 스택과 달리이 메모리는 자동으로 할당 해제되지 않습니다. 필요해 가비지 수집기 메모리 사용의 효율성을 유지하기 위해 사용하지 않는 개체를 해제합니다.
  • 스택과 달리 힙은 스레드로부터 안전한 코드를 적절히 동기화하여 보호해야합니다.

Java 힙 공간과 스택 메모리의 차이점

위의 설명을 바탕으로 다음과 같은 차이점을 쉽게 결론을 내릴 수 있습니다. 더미스택 기억.

  • 더미 메모리는 응용 프로그램의 모든 부분에서 사용되는 반면 스택 메모리는 하나의 실행 스레드에서만 사용됩니다.
  • 오브젝트가 생성 될 때마다 항상 힙 공간에 저장되고 스택 메모리에는 이에 대한 참조가 포함됩니다. 스택 메모리 만 포함 지역 기본 변수참조 변수 힙 공간의 개체에.
  • 힙에 저장된 객체는 전역 적으로 액세스 할 수있는 반면 스택 메모리는 다른 스레드에서 액세스 할 수 없습니다.
  • 스택의 메모리 관리는 LIFO 방식은 전역 적으로 사용되기 때문에 힙 메모리에서는 더 복잡합니다. 힙 메모리는 젊은 세대, 구세대 기타 자세한 내용은 Java Garbage Collection을 참조하십시오.
  • 스택 메모리는 수명이 짧은 힙 메모리는 처음부터 응용 프로그램 실행이 끝날 때까지 유지됩니다.
  • 우리는 사용할 수 있습니다 -XMX -XMS 힙 메모리의 시작 크기와 최대 크기를 정의하는 JVM 옵션입니다. 우리는 사용할 수 있습니다 -XSS 스택 메모리 크기를 정의합니다.
  • 스택 메모리가 가득 차면 Java 런타임이 발생합니다. java.lang.StackOverFlowError 반면 힙 메모리가 가득 차면 java.lang.OutOfMemoryError : Java 힙 공간오류.
  • 스택 메모리 크기는 힙 메모리와 비교할 때 매우 적습니다. 메모리 할당이 간단하기 때문에 (LIFO), 스택 메모리는 다음과 비교할 때 매우 빠릅니다.힙 메모리.

비교 차트

매개 변수 스택 더미
기본 연속 블록에 메모리 할당메모리는 무작위 순서로 할당됩니다.
할당 및 할당 해제 컴파일러에 의해 자동프로그래머의 매뉴얼
비용 적게
이행 단단한쉬운
액세스 시간 더 빠르게느리게
주요 문제 메모리 부족메모리 조각화
차이의 지역성 우수한적당한
적응성 고정 비율크기 조정 가능

이것으로이 '자바의 메모리 할당'자습서를 마칩니다. 실시간 예제를 통해 개념과 구현을 이해 하셨기를 바랍니다.

이제 이해 했으니자바의 메모리 할당이 'Java의 메모리 할당'기사를 통한 기본 사항은 전 세계에 걸쳐 250,000 명 이상의 만족 한 학습자 네트워크를 보유한 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 작성했습니다. Edureka의 Java J2EE 및 SOA 교육 및 인증 과정은 Java 개발자가 되고자하는 학생과 전문가를 위해 설계되었습니다. 이 과정은 Java 프로그래밍을 시작하고 Hibernate 및 같은 다양한 Java 프레임 워크와 함께 핵심 및 고급 Java 개념 모두에 대해 교육하도록 설계되었습니다. .

질문이 있으십니까? 이 '자바의 메모리 할당'블로그의 댓글 섹션에 언급하시면 최대한 빨리 연락 드리겠습니다.