프로그램을 실행을 시키면, 메모리에 해당 프로그램이 올라간다.
이렇게 실행되고 있는 프로그램을 우리는 프로세스라고 부르고 쓰레드 형태로 실행을 한다.
프로세스는 두가지 영역을 가지는데
Data(static or 상수)영역 : 프로세스 로딩시에 올라가야하는 데이터, 상수, 스테틱변수, 리터럴이 올라간다.
code영역 : 주로 명령어들의 공간 instruction set 한줄씩
자바프로그램을 실행시키면
위에서 말한 프로세스에서 사용하는 공통메모리 부분에
로딩하면서부터 리터럴이나 상수, static변수를 올린다.
코드영역에서는 코드가 올라가면서 한 줄씩 실행을 한다.
이 메모리 부분의 데이터들은 실행시에 로딩이 되고,
프로그램을 종료하면 없어지게 된다.
명령어를 실행하다가 함수(메소드)를 호출하게 되면,
함수는 스택영역에 쌓이는데, 이 때 함수내부에서 사용하는
로컬(지역)변수들은 이 스택영역에서 관리를 한다.
함수를 호출하면 스택에 올라가고 함수실행이 종료되면 없어지게 된다.
반면에 힙이라는 동적메모리도 있다.
이 동적메모리는 생성된 인스턴스등 동적으로 생성된 데이터를 올리는 곳으로
생성된 객체가 올라가게 된다.
이 때, 객체의 속성인 멤버변수(필드, 전역변수)도 이 동적메모리 힙에서 관리한다.
객체 생성시에 메모리에 올라가게 되고, 가비지 콜렉터에 의해서 자원이 회수된다.
728x90
'프로그래밍 > java' 카테고리의 다른 글
[spring] MappedSuperClass (0) | 2022.10.25 |
---|---|
[spring] CommunicationsException-Communications link failure (0) | 2022.10.25 |
java의 동시성문제 (0) | 2022.10.05 |
[spring] 좋은 객체지향 설계의 5가지 원칙(SOLID) (0) | 2022.03.22 |
[spring] @Valid 유효성검사 (0) | 2022.01.10 |