logo

스택 대 힙 자바

자바에서는 메모리 관리 중요한 과정입니다. Java에 의해 자동으로 관리됩니다. JVM은 메모리를 두 부분으로 나눕니다. 스택 메모리와 힙 메모리. Java의 관점에서 볼 때 둘 다 중요한 메모리 영역이지만 둘 다 다른 목적으로 사용됩니다. 그만큼 스택 메모리와 힙 메모리의 주요 차이점 스택은 메소드 실행 순서와 로컬 변수를 저장하는 데 사용되고 힙 메모리는 객체를 저장하고 동적 메모리 할당 및 할당 해제를 사용한다는 것입니다. 이번 섹션에서는 스택과 힙의 차이점에 대해 자세히 설명합니다.

스택 대 힙 자바

스택 메모리

스택 메모리는 런타임 시 각 스레드에 할당되는 물리적 공간(RAM 내)입니다. 스레드가 생성될 때 생성됩니다. 스택의 메모리 관리는 전역적으로 액세스할 수 있으므로 LIFO(Last-In-First-Out) 순서를 따릅니다. 변수, 개체에 대한 참조 및 부분 결과를 저장합니다. 스택에 할당된 메모리는 함수가 반환될 때까지 유지됩니다. 새 객체를 생성할 공간이 없으면java.lang.StackOverFlowError. 요소의 범위는 해당 스레드로 제한됩니다. 그만큼 JVM 각 스레드에 대해 별도의 스택을 생성합니다.

힙 메모리

JVM이 시작될 때 생성되고 애플리케이션이 실행되는 동안 애플리케이션에서 사용됩니다. 객체와 JRE 클래스를 저장합니다. 객체를 생성할 때마다 해당 객체의 참조가 스택에 생성되는 동안 객체는 힙 메모리의 공간을 차지합니다. 스택과 같은 순서를 따르지 않습니다. 메모리 블록을 동적으로 처리합니다. 즉, 메모리를 수동으로 처리할 필요가 없습니다. 메모리를 자동으로 관리하려면, 자바 더 이상 사용되지 않는 객체를 삭제하는 가비지 수집기를 제공합니다. 힙에 할당된 메모리는 프로그램이 종료되거나 메모리가 해제되는 이벤트가 발생하지 않을 때까지 유지됩니다. 해당 요소는 애플리케이션에서 전역적으로 액세스할 수 있습니다. 모든 스레드가 공유하는 공통 메모리 공간입니다. 힙 공간이 가득 차면java.lang.OutOfMemoryError. 힙 메모리는 다음과 같은 메모리 영역으로 더 세분화됩니다.

  • 젊은 세대
  • 생존자 공간
  • 구세대
  • 영구 세대
  • 코드 캐시

다음 이미지는 스택 메모리 및 힙 공간 할당을 보여줍니다.

스택 대 힙 자바

스택 메모리와 힙 메모리의 차이점

다음 표에는 스택 메모리와 힙 공간 간의 주요 차이점이 모두 요약되어 있습니다.

매개변수 스택 메모리 힙 공간
애플리케이션 다음과 같이 수명이 매우 짧은 품목을 저장합니다. 메소드, 변수, 그리고 참조 변수 개체의. 저장한다 사물 및 Java 런타임 환경( JRE ) 클래스.
주문 그것은 다음과 같습니다 LIFO 주문하다. 이는 동적 메모리 할당이고 메모리 블록의 할당 및 할당 해제에 대한 고정된 패턴이 없기 때문에 어떤 순서도 따르지 않습니다.
유연성 그것은 융통성이 없다 할당된 메모리를 변경할 수 없기 때문입니다. 그것은 유연한 할당된 메모리를 변경할 수 있기 때문입니다.
능률 그것은 가지고있다 더 빠르게 액세스, 할당 및 할당 해제. 그것은 가지고있다 더 느리게 액세스, 할당 및 할당 해제.
메모리 크기 그것은 더 작은 크기가. 그것은 더 큰 크기가.
사용된 Java 옵션 JVM 옵션 -Xss를 사용하여 스택 크기를 늘릴 수 있습니다. -Xmx 및 -Xms JVM 옵션을 사용하여 힙 메모리 크기를 늘리거나 줄일 수 있습니다.
가시성 또는 범위 변수는 소유자 스레드에만 표시됩니다. 모든 스레드에 표시됩니다.
공간의 생성 스레드가 생성되면 운영 체제가 자동으로 스택을 할당합니다. 애플리케이션을 위한 힙 공간을 생성하기 위해 언어는 먼저 런타임에 운영 체제를 호출합니다.
분포 각 개체에 대해 별도의 스택이 생성됩니다. 모든 스레드에서 공유됩니다.
예외 발생 JVM은 java.lang.StackOverFlowError 스택 크기가 제한보다 큰 경우. 이 오류를 방지하려면 스택 크기를 늘리십시오. JVM은 java.lang.OutOfMemoryError JVM이 새로운 기본 메소드를 생성할 수 없는 경우.
할당/할당 해제 이는 자동으로 수행됩니다. 컴파일러 . 이는 수동으로 수행됩니다. 프로그램 제작자 .
비용 그 비용은 더 적은 . 그 비용은 스택에 비해.
구현 그 구현은 딱딱한 . 그 구현은 쉬운 .
할당 순서 메모리 할당은 마디 없는 . 할당된 메모리 무작위의 주문하다.
스레드 안전성 각 스레드에는 자체 스택이 있으므로 스레드로부터 안전합니다. 스레드로부터 안전하지 않으므로 코드를 적절하게 동기화해야 합니다.