메모리 할당 컴퓨터 프로그램 및 서비스가 물리적 또는 가상으로 할당되는 프로세스입니다. 기억 우주. 이 기사에서는 메모리 할당에 대해 스택 및 힙 메모리에 대해 설명하겠습니다.
- 스택 메모리 란?
- 스택 메모리의 주요 기능
- Stack 클래스의 메서드
- 스택 구현을위한 Java 코드
- 자바의 힙 공간
- 힙 메모리의 주요 기능
- 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) } }
//산출
이제 힙 공간으로 이동하겠습니다.
자바의 힙 공간
메모리는 프로그래머가 작성한 명령을 실행하는 동안 할당됩니다. 힙이라는 이름은 힙 데이터 구조와 관련이 없습니다. 프로그래머가 사용할 수있는 메모리 공간 더미이기 때문에 힙이라고합니다. 할당 과 할당 해제. 프로그래머가이 메모리를 잘 처리하지 않으면 메모리 누수가 발생할 수 있습니다.프로그램에서 발생합니다.
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 개념 모두에 대해 교육하도록 설계되었습니다. 봄 .
질문이 있으십니까? 이 '자바의 메모리 할당'블로그의 댓글 섹션에 언급하시면 최대한 빨리 연락 드리겠습니다.