반응형
※ 설명하기에 앞서 JVM은 이 페이지에서 설명하는 것보다 복잡한 구조를 가지고 있음을 안내드립니다.
Class / Heap / Stack 으로 나누어 코드의 흐름이 JVM에서 구조를 따라 어떻게 흘러가는 지 간단히 정리했습니다.
흐름
- JVM 은 자바 코드를 컴파일해(javac) 바이트코드(0과 1)로 만듭니다.
- 이렇게 하면 어떤 OS에서든 작동할 수 있게끔 만듭니다.
- 변환된 바이트코드는 .class 파일에 저장됩니다.
- JVM의 Class Loader를 통해 메모리영역을 Load합니다.
💡 java에서 객체는 참조변수(Heap이나 Method Area 이용)없이 사용할 수 없습니다.
1. Method Area=Class Area
:JVM이 시작(프로그램실행)과 함께 생성되는 공간
public class Name {
final static int classVarialbe = 0;
public static int methodname() {
return 0;
}
}
- Staitc 을 Class소속이라고도 합니다.
Class와 같이 프로그램 시작시 제일 먼저 실행되기 때문이죠.
변수명에 Class를 붙일 수는 없으니까? static 이란 단어를 사용하지 않을까..합니다. - 따라서 static 변수보다는 cv:Class Variable 클래스 변수로 불립니다.
- Method Area 소속
- Class
- static method(Class Method)
- static variable(Class Variable)
- Class
- 프로그램 시작부터 끝까지 존재합니다.
→ 따라서 어느 영역에서든 사용이 가능합니다. - 하지만 처음부터 끝까지 메모리영역을 차지 하기 때문에
→ 평소에는 static method를 잘 사용하지 않습니다. - 보통 유틸 Util 같은 기능모음 Class 같은 경우에만 static method를 볼 수 있습니다.
2. Heap
:객체(instance)와 배열을 처리하는 공간.
ClassName cn = new ClassName(); // 인스턴스 instance
String[] arrayStr = null; // 배열 array
- 이렇게 클래스로부터 객체를 만드는 것을 인스턴스(객체)라고 합니다.
- java의 특징인 GC(garbage collector)의 대상이 되는 메모리공간이 바로 Heap입니다.
❓ Garbage Collector(GC)란
새로운 변수명이 붙지 못한 인스턴스값들은 자바가 알아서 Garbage Collector(GC)에 모아 주기적으로 삭제합니다.
※ 사실 자바는 코드로 객체를 직접 제거하는 방법을 제공하지 않습니다.
3. Stack
:금방 사용되고 금방 사라지는 데이터가 저장되는 곳.
- 기본타입 변수
- 지역변수 Local variable
- 매개변수 parameter
- 인스턴스변수 instance value
스택만으로는 사용할 수 없기에
(스택이 들어있는)클래스를 인스턴스화 해서 힙영역에 저장해 사용합니다.
LIFO
Last In First Out
스택과 같이 마지막에 저장된 것을 제일 먼저 꺼내는 구조를 말합니다.
정리
package test;
public class TestPage {
public static void main(String[] args) {
Tv t = new Tv();
t.tvVal = 0;
}
}
class Tv{
int tvVal;
}
- Tv t 에서 Tv는 타입 을 나타낸다.
인스턴스를 만들 때도 String str = a; int i = 0; 처럼 타입을 적는 겁니다. - 여기서 t는 참조변수 (리모콘 같은) 역할.
이때 참조변수 t는 Heap 영역에 저장됩니다. - new Tv는 클래스를 인스턴스화 한 객체.
Tv라는 클래스를 new를 붙여 복사해 인스턴스화한 객체라고 보시면 됩니다. - = 대입연산자로 객체(new Tv)를 참조변수 t에 연결 해 사용한다.
반응형
'☕ JAVA > ☕ 개발환경' 카테고리의 다른 글
IoC, ID, 그리고 컨테이너(Assembler) (0) | 2025.02.20 |
---|---|
[JAVA]view ↔ java ↔ DB 연결 정리 (1) | 2025.01.03 |
[JAVA]JDBC란? 사용법까지 간략 정리 (0) | 2025.01.01 |
[JAVA]자바 API 소스 보기 (0) | 2024.11.19 |
아주 간단하게 설명한 개발환경. JVM, JRE, JDK (0) | 2023.01.01 |