반응형
※ 설명하기에 앞서 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)
- 프로그램 시작부터 끝까지 존재합니다.
→ 따라서 어느 영역에서든 사용이 가능합니다. - 하지만 처음부터 끝까지 메모리영역을 차지 하기 때문에
→ 평소에는 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 > ☕ 개발환경' 카테고리의 다른 글
[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 |