일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- programmers
- Lv 2
- 데이터베이스
- LV 0
- github
- mysql
- Java
- 쿠버네티스
- 코테
- 프로그래머스
- Ai
- 파이썬
- Kubernetes
- 자바
- Linux
- db
- 우분투
- Python
- 코딩테스트
- 자료구조
- 리눅스
- 알고리즘
- git
- DevOps
- 인공지능
- 머신러닝
- 정처기
- 깃
- docker
- ubuntu
Archives
- Today
- Total
Myo-Kyeong Tech Blog
[ JAVA ] JAVA 클래스 변수와 인스턴스 변수 생성 시점과 메모리 영역 본문
728x90
반응형
클래스 변수 (Class Variables)
- 클래스의 모든 인스턴스가 공유하며, 이 변수들은 클래스가 메모리에 로드될 때 생성
- 클래스 변수는 JVM의 Method Area라고 불리는 영역에 저장됨
- 한 번 로딩된 클래스는 중복해서 로딩되지 않음.
인스턴스 변수 (Instance Variables)
- 해당 클래스의 객체(인스턴스)가 생성될 때마다 메모리에 생성
- 인스터스 변수는 Heap 메모리 영역에 저장됨
클래스 변수와 인스턴스 변수 생성 시점과 메모리 영역 예시
public class Exam0140 {
static class A {
static int v1;
int v2;
}
public static void main(String[] args) {
A.v1 = 100;
A p = new A();
p.v2 = 200; // OK!
A p2 = new A(); // 새 v2 변수가 생성
p2.v2 = 300;
System.out.printf("A.v1=%d, p.v2=%d, p2.v2=%d\n", A.v1, p.v2, p2.v2);
}
}
1. 클래스 로딩
- 코드가 실행되기 시작하면, 먼저 'A' 클래스가 로드되며, 이 클래스에 선언된 클래스 변수인 'v1'이 메모리에 할당
- 'v1'은 Method Area라는 메모리 영역에 할당되며 모든 인스턴스에서 공유
2. 클래스 변수 할당
- 'A.v1 = 100;' 라는 코드가 실행되면, 'v1' 이라는 클래스 변수에 100이라는 값이 할당
3. 인스턴스 생성
- ' A p = new A();' 코드가 실행되면, 'A' 클래스의 인스턴스가 생성됨
- 힙 메모리 영역에 위치
- 'p'라는 참조 변수는 이 인스턴스를 가리키게 됨
4. 인스턴스 변수 할당
- 인스턴스 생성 과정에서 'v2'라는 인스턴스 변수도 힙 영역 내에 생성
- 'p.v2 = 200;' 코드를 통해 'v2' 변수에 200 값 할당
5. 두 번째 인스턴스 생성
- 'A p2 = new A();' 코드를 통해 'A' 클래스의 또 다른 인스턴스가 생성
- 또 다른 'v2' 인스턴스 변수가 힙 영역에 생성
6. 두 번째 인스턴스 변수 할당
- 'p2.v2 = 300;' 코드를 통해 두번째 'v2' 변수에 300이라는 값 할당
7. 결과 출력
- 마지막으로 'Sytstem.out.printf("A.v1=%d, p.v2=%d, p2.v2=%d\n", A.v1, p.v2, p2.v2); 코드 실행
728x90
반응형