C와 Java의 메모리 구조 차이

dy7888·2023년 8월 22일
0

C

메모리 관리를 직접 제어한다. 프로그래머가 메모리 할당과 해제를 수동으로 관리

  1. 스택
    지역 변수와 함수 호출 정보를 저장. 함수 호출 시 지역 변수와 함수 호출 스택 프레임이 저장되고, 함수가 반환될 때 해당 스택 프레임이 제거된다.

  2. 동적으로 할당된 메모리를 관리하는 영역
  3. 데이터
    전역 변수와 정적 변수가 저장되는 영역. 프로그램 시작 시에 초기화되고, 프로그램 종료까지 유지된다.
  4. 코드
    프로그램의 실행 코드가 저장되는 영역. 읽기 전용 메모리로 실행 중에 수정할 수 없다.

Java

Garbage Collector라는 별도 프로그램이 돌면서 메모리를 관리한다. 메모리 영역에 직접 접근하지 않고 JVM이라는 가상 머신을 이용해서 간접적으로 접근한다.

1. 메소드 영역

클래스의 정보, 정적 변수, 메소드 코드 등이 저장되는 곳. JVM이 클래스를 로드할 때 메모리에 할당된다.

2. 힙

객체들이 동적으로 할당되는 곳. 개발자가 직접 메모리 할당 및 해제를 다루지 않아도 된다. 가비지 컬렉션은 더 이상 참조되지 않는 객체들을 자동으로 탐지하여 해제한다.

3. 스택

각 스레드마다 별도의 스택이 생성되며, 스레드의 호출 스택 프레임과 지역 변수가 저장된다.

4. PC 레지스터

현재 실행 중인 JVM 명령의 주소를 저장

5. 네이티브 메소드 스택

자바 코드가 아닌 네이티브 코드(보통 C나 C++ 코드)를 실행하는데 사용

Java는 가비지 컬렉션과 같은 기능을 통해 메모리 누수(memory leak)를 줄이고, 개발자가 메모리 관리에 신경을 덜 쓸 수 있도록 도와준다.

profile
나의 기록하는 개발 일지

0개의 댓글