자바 메모리 관리
JVM은 시스템(운영체제)으로부터 프로그램을 실행하는데 필요한 메모리를 할당받고 JVM은 할당받은 메모리를 용도에 따라 세 영역으로 나누어 관리합니다.
자바는 C언와 같이 직접적인 메모리 주소에 접근할 수 없으며 개발자가 메모리를 할당받거나 반환하지 않아도 되는 구조이기 때문에 일반적인 응용 프로그래머의 경우 구체적인 메모리 관리에 대해서는 자세히 알 필요는 없습니다.
메서드 영역
프로그램 실행 중 특정 클래스가 사용되면, JVM은 해당 클래스의 클래스 파일(*. class)을 읽어서 분석한 다음 클래스에 대한 정보를 이곳에 저장하게 됩니다. 이때 클래스변수나 메서드(static)도 이 영역에 함께 생성됩니다.
main()에서 클래스에 선언된 변수에 접근할 수 없는 것도 이러한 이유로 main()은 static 으로 선언되어 있기 때문에 클래스에 선언된 멤버 변수(인스턴스 변수)를 사용할 수 없으며 인스턴스의 변수들은 힙 영역에 생성되기 때문에 인스턴스를 통해서만 접근이 가능한 것입니다.
힙 영역(heap area)
프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성됩니다. 즉, 인스턴스 변수들이 생성되는 공간으로 대부분의 메모리 공간은 힙 영역이 됩니다.
서버 시스템이나 메모리 사용이 많은 프로그램을 개발하거나 실행할 때 힙 메모리 부족으로 문제가 발생할 수 있으며 이 경우 JVM 메모리 옵션을 조정해 주어야 합니다.
호출 스택(call stack or execution stack)
호출 스택은메서드 실행에 필요한 메모리 공간을 말합니다. 메서드가 호출될 때 호출 스택에는 호출된 메서드를 위한 메모리가 할당되며 이 메모리는 메서드가 작업을 수행하는 동안 지역변수 및 매개변수들의 연산 중간결과 등을 저장하는 데 사용됩니다. 메서드가 작업을 마치면 할당되었던 메모리 공간은 반환되어 정리(비워짐)됩니다.
지역변수들의 경우 멤버 변수나 다른 함수에서 사용된 변수들과 이름이 같아도 문제가 없는 이유입니다.
'JAVA > JAVA 개념' 카테고리의 다른 글
JAVA 개념 3-2 - 반복문 (0) | 2022.11.24 |
---|---|
JAVA 개념 3-1 - 조건문 (0) | 2022.11.23 |
JAVA 개념 2-3 - 연산자 (2) | 2022.11.14 |
JAVA 개념 2-2 - 변수와 메서드 (0) | 2022.09.28 |
JAVA 개념 2-1 - 자바 기본 문법 (0) | 2022.09.20 |