정적과 동적할당이 중요한 이유??
메모리를 효율적으로 관리하기 위해서!!
정적을 필요에 의해서 계속 메모리상에서 정적으로 자리잡게 되고, 동적할 당은 안쓰는 동안 메모리 사용을 하지않고 필요한 때, 필요한 시점에만 메모리에 띄우게 된다.
정적 메모리와 동적 메모리에서 일어나는 일
STATIC 메모리의 특징
프로그램의 실행기간 동안 존재하는 메모리 영역이다. 이 영역에는 글로벌 변수와 정적 변수등이 할당이 된다. 특히 메인클래스가 시작되기 전부터 생성이 되고 마지막 종료가 될 때까지 계속 존재하고 있으며 운영체제가 이를 관리한다.
만약 static변수의 남발로 static메모리의 공간을 많이 차지하게 되면 메모리 누수가 일어나 시스템 성능을 저하시킬 가능성이 있으므로, static을 사용하고자 한다면 꼭 필요한 곳에 유의하여 사용하여야 된다.
public class Person1 { static int age = 20 ; // main이 작동하기전에 static은 이미 메모리상에 올라가있다. } Public class MemEx01 { public static void main (String[] args) { // 프로그램이 종료될 때까지 작동하고 있다. } }
- 상위의 코드를 입력하게 되면 위 그림과 마찬가지로 각 요소들은 메모리상의 공간을 차지하고 있다.
- 이는 프로그램 종료까지 작동하므로, 남발하게 된다면 메모리 누수를 초래할 수 있다.
- static이 붙어야 메모리상에 뜨게되고 머신이 정보를 찾을 수 있다.
- main이 실행되기 전에 static이 정적으로 뜬다.
Heap메모리의 특징
동적으로 할당되는 메모리 영역이다. 프로그래머가 코드 내에서 필요할 때마다 메모리를 할당하고 해제할 수 있다. 사용이 끝나는 후에는 프로그래머가 실행 시간의 크기를 결정하고 할당 및 해제 할 수 있는 유연한 메모리 공간이다.
이러한 특징 때문에 힙 메모리는 프로그램의 복잡하고 동적인 메모리 요구사항을 충족시키는 데 중요한 역할을 한다.
Peson2 kim = new Person2();
- 이렇게 생성하게되면 Heap메모리 상에 Person2의 공간을 형성하게 된다
- 메인 블럭안에서 필요한 시기에 new라는 키워드로 동적할당을 할 수 있다.
- Heap메모리의 수명은 프로그래머가 직접 관리해야된다. 사용후 명시적으로 해제하지 않으면 메모리 누수가 발생할 수 있다.
Share article