[Java] 1. JVM 메모리 구조 / static, final 키워드

2026. 1. 14. 00:30·프로젝트/Java

1. OS 메모리 구조와 JVM 메모리 구조

 

[OS 메모리 구조]

: 윈도우나 리눅스에서 프로그램을 실행하면(프로세스가 생성되면) OS는 프로세스 하나를 위해 메모리를 아래와 같이 할당해준다.

  1. Code 영역(Text 영역): 실행할 프로그램 코드가 들어있다. (0, 1로된 기계어)
  2. Data 영역: 전역변수, static 변수을 저장한다.
    • 프로그램이 시작될 때 할당되고, 프로그램이 종료될 때까지 유지된다.
    • 어디서든 접근할 수 있는 변수들이 모여있는 곳
    • Initialized Data 영역: 명시적으로 초기화한 전역변수, static변수가 저장되는 곳
    • BSS 영역: 초기화되지 않은 전역변수, static 변수가 저장되는 곳
  3. Heap 영역: 사용자가 직접 관리하는 메모리 영역 (동적할당)
  4. Stack 영역: 지역변수, 매개변수, 리턴주소가 저장되는 메모리 영역 (자동으로 생성되고 삭제된다)

 

[JVM 메모리 구조]

: JVM도 OS 입장에서는 하나의 프로세스이다. heap 영역을 거대하게 때어주고 그 메모리를 JVM이 다시 쪼개서 관리하다.

  저장 데이터 생명 주기(Life Cycle) 특징
Static (Method) 클래스 정보, static 변수 프로그램 시작 ~ 종료 모든 곳에서 공유됨.
Stack 지역변수, 매개변수 메소드 호출 ~ 리턴(종료) 자동 초기화 X, LIFO 구조.
Heap 객체(new로 생성된 인스턴스) 객체 생성 ~ GC 수거 자동 초기화 O, GC가 관리.

 

* Stack 영역은 자동 초기화가 안되지만, Heap 영역은 자동 초기화가 된다. (Stack과 Heap의 가장 큰 차이)

 


2. static, final 키워드

  static (클래스 변수) final (변경 금지)
클래스 (Class)   상속 금지
필드 (Variable) 모든 객체가 값을 공유 (클래스 변수) 값 변경 금지 (한 번 초기화하면 끝)
메소드 (Method) 객체 생성 없이 호출 가능 (ClassName.run()) 오버라이딩 금지 (부모의 기능을 못 바꿈)

 

 

* 상수 정의 방법

: 변하지 않으면서 (final) + 어디서나 공유해서 쓸 수 있는 (static)으로 정의한다.

// 접근제어자 static final 데이터타입 상수명 = 값;
public static final double PI = 3.14159;

 

'프로젝트 > Java' 카테고리의 다른 글

[Java] 6. 예외처리  (0) 2026.02.06
[Java] 5. 문자열 (String, StringBuilder, StringBuffer), 자바 표준 입출력  (0) 2026.01.29
[Java] 4. 추상 클래스, 인터페이스  (0) 2026.01.28
[Java] 3. Object 클래스 (toString, equals, hashCode, clone)  (0) 2026.01.28
[Java] 2. this, super / 다형성 (Up-casting, Down-casting)  (0) 2026.01.14
'프로젝트/Java' 카테고리의 다른 글
  • [Java] 5. 문자열 (String, StringBuilder, StringBuffer), 자바 표준 입출력
  • [Java] 4. 추상 클래스, 인터페이스
  • [Java] 3. Object 클래스 (toString, equals, hashCode, clone)
  • [Java] 2. this, super / 다형성 (Up-casting, Down-casting)
sophon
sophon
sophon 님의 블로그 입니다.
  • sophon
    sophon 님의 블로그
    sophon
    • 카테고리 (172) N
      • 컴퓨터공학 (36)
        • 데이터베이스 (19)
        • 네트워크 (15)
        • 기타 이슈 (2)
      • 프로젝트 (16) N
        • Java (8)
        • Spring (4) N
        • Docker (4)
      • 코딩테스트 (95) N
        • BOJ (74)
        • 프로그래머스 (7)
        • 프로그래머스 SQL (12) N
        • PS Snippets (2)
      • 🌱 잡담 (22)
        • 자격증 (7)
        • 좋은 시 모음 (12)
        • 책과 영화 (3)
        • 기록 (0)
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
sophon
[Java] 1. JVM 메모리 구조 / static, final 키워드
상단으로

티스토리툴바