Java 메모리 파티셔닝:
Java 메모리 할당에서 Java는 메모리를 메서드 영역, 힙, 가상 머신 스택, 로컬 메서드 스택 및 프로그램 카운터로 나눕니다. 메서드 영역과 힙은 모든 스레드에서 공유되는 반면, 가상 머신 스택, 로컬 메서드 스택 및 프로그램 카운터는 스레드 격리됩니다. 각 지역에는 고유한 생성 및 파괴 시간이 있습니다.
프로그램 카운터:
현재 스레드에서 실행된 바이트의 줄 번호 표시기로 사용됩니다. Java의 멀티스레딩은 스레드를 차례로 전환하고 프로세서 실행 시간을 할당하는 방식으로 구현됩니다. 따라서 각 스레드가 전환 후 올바른 위치로 돌아가려면 각 스레드에는 독립적인 프로그램 카운터가 필요합니다.
Java 가상 머신 스택:
각각이 실행되면 로컬 변수 테이블, 피연산자 스택, 동적 링크, 메서드 종료 및 기타 정보를 저장하기 위해 스택 프레임이 동시에 생성됩니다. 가상 메모리 스택은 우리가 흔히 "스택"이라고 부르는 것입니다. 지역 변수 테이블에 필요한 메모리는 컴파일 타임에 할당됩니다.
로컬 메소드 스택:
가상 머신 스택과 유사하게 차이점은 가상 머신 스택은 가상 머신에 대해 Java 메소드 서비스를 실행하는 반면 로컬 메소드 스택은 기본 메소드를 사용하여 가상 머신을 제공한다는 것입니다.
자바 힙:
모든 프로그램에서 공유되며 가상 머신이 시작될 때 생성됩니다. 이 메모리 영역은 객체 인스턴스를 저장하는 데 사용됩니다. Java Virtual Machine 규정에 따르면 Java 힙은 논리적으로 연속적인 한 물리적으로 불연속적인 메모리 공간에 있을 수 있습니다.
방법 영역:
힙과 동일하며 스레드 간에 공유됩니다. 그 기능은 가상 머신에 의해 로드된 클래스 정보, 상수, 정적 변수, JIT(Just-In-Time) 컴파일러에 의해 컴파일된 코드 등과 같은 데이터를 저장하는 것입니다.
런타임 상수 풀:
메소드 영역의 일부입니다. 그 기능은 컴파일 중에 생성된 다양한 리터럴 및 기호 참조를 저장하는 것입니다.