멀티프로세스
하드디스크에 있는 프로그램을 사용하려고 할때 메모리에 올린다.
그리고 이렇게 메모리에 올린 상태를 프로세스라고 한다.
컴퓨터는 메모리에 프로세스를 여러개 올리고 CPU가 여러개의 프로세스를 번갈아가며 처리하는데
매우 빠른 속도로 처리하기에 동시에 처리하는것처럼 느껴진다.
메모리는 총 4가지 영역으로 구성되어 있다.
# 함수는 stack에 생긴다.
# 메인에서 new로 클래스를 메모리에 올릴때 변수가 heap에 생성된다.
# 그리고 stack의 함수가 heap에 있는 변수를 가리킨다.
점의 좌표를 가지고있는 클래스를 만든다.
public class Point {
// 클래스의 멤버변수
int x;
int y;
int print() {
// 로컬변수
int i = 0;
System.out.println("x: "+x+", y: "+y);
return i;
}
}
# 클래스의 멤버변수는 heap에 저장된다.
# 함수에 있는 변수는 로컬변수다 (local variables)
# 함수에서의 로컬변수의 저장은 stack에 저장된다.
# 호출될때 main함수의 메모리 영역에 결과가 저장되며 함수가 종료되면 steak이 모두 사라진다.
메인함수를 만든다.
public class PointMain {
public static void main(String[] args) {
Point p1 = new Point();
p1.x = 1;
p1.y = 2;
p1.print();
}
}
Static 키워드를 사용했을때 해당 변수는 값의 상태(계산 및 변화)가 공유된다.
public class StaticVar {
static int a = 2;
int b = 1;
void staticTest() {
a = a + 1;
b = b + 1;
System.out.println("static int a: "+a);
System.out.println("member int b: "+b);
}
}
메인함수에서 확인해보자.
1. stack에 v1 생기고 Data(static)에 a:1이 생긴것과 heap에 과 b:1이 생긴것에 연결된다.
public class StaticMain {
public static void main(String[] args) {
StaticVar v1 = new StaticVar();
2. Data(static)에 있던 a와 heap에 있던 b가 하나씩 더해짐 (a:2, b:2) 그리고 화면에 출력된다.
v1.staticTest();
3. stack에 v2 생기고 heap에 v2의 b:1이 생긴것에 연결된다.
하지만 v2가 생겨도 Data(static)에 v2의 a:1이 생기는것이 아니며 Data(static)에 원래 있었던 a:2를 공유하게 된다.
StaticVar v2 = new StaticVar();
4. Data(static)에 있던 a와 heap에 있던 b가 하나씩 더해짐 (a:3, b:2) 그리고 화면에 출력된다
v2.staticTest();
'Java' 카테고리의 다른 글
[Java] 생성자와 생성자의 메소드 오버로딩 (0) | 2022.07.01 |
---|---|
[Java] 메소드 오버로딩(Method Overloading) (0) | 2022.07.01 |
[Java] 클래스(Class), 객체(instance, Object) (0) | 2022.07.01 |
[Java] 함수 (0) | 2022.07.01 |
[Java] 배열(Array), length (0) | 2022.07.01 |
댓글