운영체제에 대한 개념은 매번 블로그에 적으면서 복습을 계속 해주는게 잊어버리지 않고
스스로 한번 더 생각을 정리할 수 있어서 os 관련 공부도 매일 적어보려고 한다!!
이걸 이해하기 위해서는 어플리케이션이 무엇인지, cpu, 메모리를 먼저 정확하게 정의하고 넘어가야한다!
일반 사용가자 사용할 기능을 제공하는, 컴퓨터가 실행 할 수 있는 명령어들의 집합!
메모리: 실행된 어플리케이션이 상주하는 곳
cpu: 명령어를 실행하는 추세
public static void main(String [] args) {
int a = 7;
int b = 3;
int c = a + b;
}
일단 저렇게 코드가 작성되어있고 유저가 실행을 누른다면!
간단하게 보면 cpu의 명령을 보고 메모리에 저장이 되고 있다!
runtime -> 실행되고 있는 시간을 의미! (실행상태)
위의 코드에서는 코드가 끝날때까지가 runtime인거다!
우리는 cpu의 명령을 통해 메모리를 사용한다
하지만 메모리에 데이터가 아무렇게 저장된다면 컴퓨터가 지금처럼 빠르게 응답을 주지는 못할거다!
메모리 구조를 누군가 물어본다면 대표적으로 stack과 heap에 대해서 알고 있으면 된다
stack -> 함수가 스택프레임으로 저장이 되고 그안에 함수의 매개변수와 지역변수가 저장된다!
함수가 호출될때 stack에 쌓인다!
heap -> 객체가 저장 되는 공간! 흔히 java에서 new로 만든 애들이 저장된다!
public class Main {
public static void main(String [] args) {
int a = 7;
int b = 3;
int c = a + b;
System.out.println(c);
int d = 100;
d = wow(d);
Counter cc = new Counter();
}
private int wow(int num) {
int b = num * 4;
return b;
}
}
class Counter {
private int state = 0;
public void increment() { state++; }
public int get() { return state; }
}
스택에는 넣을 수 있는 한계가 있기 때문에 재귀함수를 사용하게 될때 무한으로 쌓이지 않게 조심하기!
wow() 호출이 다 끝난 다음 부분부터 봐보자!
결론부터 말하면 Counter cc = new Counter(); 인 부분을 cc = null; 로 하면 된다!
java에서는 프로그램이 객체를 참조하고 있는지 확인해준다!
그렇기에 heap메모리 참조를 더는 안하게 된다면 Garbage Collector에서 보고 제거한다!