ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 메모리 영역
    Computer Science 2020. 9. 24. 19:12

    JAVA Part

     

    프로그램을 구동하기 위해서는 운영체제가 메모리(RAM)에 데이터 및 명령어를 저장할 공간을 할당해준다.

    한정된 용량을 갖고 있는 메모리를 어떻게 관리하느냐에 따라 프로그램의 성능이 좌우된다. 

    메모리 공간은 크게 Static, Stack, Heap 영역으로 구분되고, 데이터 타입에 따라 해당 공간에 할당된다.

     

    Static Area

    static 키워드를 사용하여 변수를 선언하면 static 영역에 데이터가 저장된다. static 영역의 데이터는 프로그램의 시작부터 종료될 때 까지 메모리에 남아있게 된다. 즉, 스태틱 전역변수는 프로그램이 종료될 때까지 어디서든 사용가능하다. static 전역변수를 무분별하게 사용하다 보면 메모리가 부족할 우려가 있어 필요한 변수만 static으로 선언해야 한다.

    static 영역에 있는 데이터는 Garbage Collector에 의해 데이터가 삭제되지 않고, 프로그램 종료 시까지 메모리에 남아있다.

     

    Stack Area

    기본자료형(primitive type)에 해당되는 지역변수는 스택영역에 데이터의 값이 저장된다. 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리가 해제된다. 스택영역은 LIFO의 구조를 갖고 변수에 새로운 데이터가 할당되면, 이전 데이터는 지워진다. 

    for문 내에 지역변수로 int i를 정의했을 때, for문이 종료된 다음 i는 사용할 수 없다. 이유는 for문 내의 지역 변수이므로 for문의 종료와 함께 스택영역에서 해제되었기 때문이다. 

     

    Heap area(힙 메모리 영역)

    참조형(Reference Type)의 데이터 타입을 갖는 객체(인스턴스), 배열 등은 Heap 영역에 데이터가 저장된다. 이때 변수는 

    Stack 영역의 공간에서 실제 데이터가 저장된다. 이때 변수는 Stack영역의 공간에서 실제 데이터가 저장된 Heap 영역의 참조값을 new 연산자를 통해 리턴 받는다. 다시 말하면, 실제 데이터를 갖고 있는 Heap영역의 참조값을 Stack영역의 객체가 갖고있다. 이렇게 리턴 받은 참조값을 갖고있는 객체를 통해서만 해당 인스턴스를 다룰 수 있다. 

     참고로 Heap에 저장된 데이터가 더 이상 사용이 불필요하다면 메모리 관리를 위해 JVM(자바 가상머신)에 의해 알아서 해제된다. 이러한 기능을 가비지컬렉션(GC, 쓰레기 수집)이라고 한다. 

     

     

    JVM, GC

    쓰레드 / 문제점 / 멀티쓰레딩 구현사례

    링크드리스트 VS 배열

    final

    디자인패턴 사용경험

    SYNCRONIZED 키워드 

    os 메모리 저장되는 4가지영역

    안드로이드 핸들러 동작원리

    'Computer Science' 카테고리의 다른 글

    의존성 주입(Dependecy Injection) 이란?  (0) 2020.12.17
    커널(Kernel)  (0) 2020.12.09
    Garbage Collector 이해  (0) 2020.12.01
    PNG와 JPG 파일 차이  (0) 2020.11.30
    Process와 Thred  (0) 2020.09.24
Designed by Tistory.