프로그래밍/java

java와 메모리

znvlcm 2022. 10. 7. 18:01

프로그램을 실행을 시키면, 메모리에 해당 프로그램이 올라간다. 

이렇게 실행되고 있는 프로그램을 우리는 프로세스라고 부르고 쓰레드 형태로 실행을 한다.  

프로세스는 두가지 영역을 가지는데 

Data(static or 상수)영역 : 프로세스 로딩시에 올라가야하는 데이터, 상수, 스테틱변수, 리터럴이 올라간다.

code영역 : 주로 명령어들의 공간 instruction set 한줄씩 

 

자바프로그램을 실행시키면 

위에서 말한 프로세스에서 사용하는 공통메모리 부분에

로딩하면서부터 리터럴이나 상수, static변수를 올린다. 

코드영역에서는 코드가 올라가면서 한 줄씩 실행을 한다.

이 메모리 부분의 데이터들은 실행시에 로딩이 되고, 

프로그램을 종료하면 없어지게 된다.  

 

명령어를 실행하다가 함수(메소드)를 호출하게 되면, 

함수는 스택영역에 쌓이는데, 이 때 함수내부에서 사용하는

로컬(지역)변수들은 이 스택영역에서 관리를 한다.

함수를 호출하면 스택에 올라가고 함수실행이 종료되면 없어지게 된다.  

 

반면에 이라는 동적메모리도 있다. 

이 동적메모리는 생성된 인스턴스등 동적으로 생성된 데이터를 올리는 곳으로 

생성된 객체가 올라가게 된다. 

이 때, 객체의 속성인 멤버변수(필드, 전역변수)도 이 동적메모리 힙에서 관리한다. 

객체 생성시에 메모리에 올라가게 되고, 가비지 콜렉터에 의해서 자원이 회수된다.

 

 

 

 

728x90