JAVA

JAVA 기초

윤승 2025. 2. 25. 19:52

순서

1.JVM : JAVA 이론

2.JAVA 메모리 구조

3.JAVA 변수

 


JVM(Java Virtual Machine)이란?

일반 애플리케이션의 코드는 OS만 거치고 하드웨어로 전달되는데, JVM은 OS에 종속적이지 않고, JAVA를 인식, 실행할 수 있게 하는 가상 컴퓨터이다.

JVM의 구조

  1. Class Loader:. class 파일을 JVM 메모리(RunTime Data Area)로 적재하는 역할.
  2. Execution Engine: 바이트 코드를 기계어로 변환해 실행하는 엔진(JIT 컴파일러 사용 가능).
  3. Garbage Collector: 참조되지 않는 객체를 탐색 후 제거하는 역할(GC 중 STW 발생).
  4. Runtime Data Area: JVM이 실행 중 데이터를 적재하는 메모리 영역.
  5. Method Area: 클래스 정보, static 변수, 상수 풀(Constant Pool) 등을 저장하는 영역.
  6. Heap Area: new 키워드로 생성된 객체와 배열이 저장되는 영역(GC 대상).
  7. Stack Area: 지역 변수, 파라미터, 연산 중 임시 값이 저장되는 영역.
  8. PC Register: 각 스레드마다 생성되며 현재 실행 중인 명령어의 주소를 저장.
  9. Native Stack Area: 네이티브 코드(C, C++ 등) 실행을 위한 메모리 영역.

메모리구조를 표현한 간단한 표

메모리 영역 저장되는 것 특징
Method Area 클래스 정보, 메서드 코드, 정적 변수, 상수 풀 클래스 로딩 시, 모든 클래스 정보 저
Heap Area 객체, 배열 객체 생성 시 메모리 할당, GC로 관리
Stack Area 지역 변수, 메서드 파라미터, 리턴 값 메서드 호출 시마다 스택 프레임 생성, 종료 시 제거
PC Register 현재 실행 중인 명령어 주소 각 스레드마다 존재, 프로그램 흐름 제어
Native Stack 네이티브 메서드 관련 데이터 자바 외의 언어로 작성된 코드가 사용하는 스택

 

JAVA 실행순서

JAVA 실행 순서

 

코드 작성 → 컴파일 → JVM이 실행 → 메모리 관리 → 종료


변수

변수란 사람들 마다 표현하는 방식이 다를 수 있지만, 간단하게 데이터 값을 담을 수 있는 상자이다.

 

그렇다면 변수는 어떻게 사용하는가?

 

변수의 구조

[자료형] [변수이름][세미콜론]
int a;

 

변수에는 각 클래스변수와 인스턴스변수, 지역 변수가 있다.

변수 종류 선언 위치 생성  시기
클래스 변수
(Static variable)
클래스 영역 클래스가 메모리에 올라갈 때
인스턴스 변수
(Instance variable)
클래스 영역 인스턴스가 생성될 때
지역 변수
(Local variable)
클래스 영역 이외의 영역(메서드 등) 변수 선언문이 수행되었을 때

 

1.클래스 변수 (static 변수)

  • static 키워드가 붙은 변수
  • 클래스가 로드될 때 메모리에 딱 한 번 생성되고 모든 객체가 공유
  • 객체를 생성하지 않고도 클래스명.변수명으로 접근 가능
class Example {
    static int classVar = 10;  // 클래스 변수
}
System.out.println(Example.classVar);  // 객체 없이 사용 가능

2. 인스턴스 변수 (멤버 변수)

  • static이 없는 멤버 변수
  • 객체(instance)마다 별도로 생성되므로 서로 다른 값을 가짐
  • 객체가 생성될 때마다 메모리에 할당되고, 객체가 사라지면 삭제됨
class Example {
    int instanceVar = 20;  // 인스턴스 변수
}
Example obj1 = new Example();
Example obj2 = new Example();
obj1.instanceVar = 30;  // obj1과 obj2는 서로 다른 값을 가짐

 

3. 지역 변수 (메서드 내부 변수)

  • 메서드나 블록 {} 내부에서 선언된 변수
  • 해당 블록이 실행될 때 생성되고, 끝나면 사라짐
  • 다른 메서드에서 사용할 수 없음
  • 반드시 초기화해야 사용 가능
class Example {
    void method() {
        int localVar = 40;  // 지역 변수
        System.out.println(localVar);
    }
}

 

'JAVA' 카테고리의 다른 글

JAVA - Enum  (0) 2025.03.05
JAVA - 제네릭(Generic)  (1) 2025.03.04
JAVA로 간단한 계산기 구현 2  (0) 2025.02.28
JAVA 클래스와 객체  (0) 2025.02.27
자바로 간단한 계산기 구현(if, while, switch, scanner)  (0) 2025.02.25