개발 & 일상

Java 의 정적할당(static) / 동적할당(dynamic) 본문

💻 개발공부/😈 개발지식

Java 의 정적할당(static) / 동적할당(dynamic)

벵갈벵 2023. 1. 14. 18:46
728x90
반응형

 동적할당  

메모리 동적할당이란, 프로그램을 실행하는  필요한 메모리 공간을 할당하는 것을 말한다.

사용이 끝나면 운영체제가 사용 할 수 있도록 반납하고 다음 요구시 재 할당을 받을 수 있다.

동적으로 할당된 메모리 공간은 프로그래머가 직접 해제하거나 가비지 컬렉터에 의해 해제된다.

 

java 에서는 new 연산자 를 할때마다 힙 영역에 할당되며 gc의 대상이 된다.

 

동적 할당은 프로세스 영역에서 할당하므로 프로세스가 종료되면 운영 체제에 메모리 리소스가 반납되므로 해제된다

 

int[] a;

a = new int[5];

 new 연산자 등을 사용해 프로그램 도중 필요한 양 만큼 할당하는 것 heap 메모리에 저장된다.

(프로그램 종료시 garbage collector가 정리한다)

 

정적할당 

메모리 정적할당은, 메모리의 크기가 하드 코딩되어 있기 때문에,

프로그램이 시작 될 때 필요한 메모리의 크기를 예상해서 미리 할당(확보) 한다는 특징을 갖는다.

정적할당된 메모리의 경우 프로그램을 실행하는 도중에는 해제되지 않고 있다가, 프로그램 종료 시 운영체제가 회수해 간다.

 

메모리를 미리 stack memory에 확보해둔다.

int[] a = new int[10];

 함수종료될때까지 안쓰는 메모리가 낭비된다.

- 함수 호출이 끝나면 사라진다.

가비지컬렉터(Garbage Coolector)  

 

1. 메모리 할당

2. 사용 중인 메모리 인식

3. 사용하지 않는 메모리인식

 

'주소를 잃어버려서 사용할 수 없는 메모리', '정리되지 않은 메모리'. 즉, 쓰레기를 가비지라 칭한다.

(ex - 메모리를 가지고 있으나 수행이 완료되어 앞으로 사용하지 않고, 연결된 리모콘이 없는 객체)

 

가비지콜렉터는 이런 가비지들을 메모리에서 해제 시켜 다른 용도로 사용 할 수 있게 해주는 프로그램을 말한다.

 

C++와 같은 다른 언어에서는 사용하지 않을 객체의 메모리를 직접 해제해주어야 하지만

자바에서는 가비지컬렉터라는 알고리즘을 사용해 메모리를 관리한다.

 

 

 

 

아직 이해안감...

 

 

728x90
반응형
Comments