ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java | Java 메모리 구조
    JAVA/JAVA 2020. 1. 28. 22:10

    JAVA 메모리 구조


    Method Area(= Static Area)

    JVM이 읽어들인 클래스와 인터페이스에 대한 런타임 상수 풀,
    멤버 변수(Instance 변수), 클래스 변수(Static 변수), 생성자, 메소드 등을 저장하는 공간

    • 프로그램이 시작되면 가장 먼저 메모리에 올라오는 부분
      → main() 메소드가 가장 먼저 메모리에 올라감
    • 정적 변수, 정적 메소드 선언시 static영역에 할당됨
      → 과도하게 사용시 메모리가 낭비되거나 메모리에 과부하가 걸릴 수 있음

    Heap

    프로그램에서 사용하는 동적 메모리(dynamic memory) 공간

    • new 연산자로 객체 생성시 객체가 저장되는 공간
    • ex) Car sonata = new Car();
      sonata 변수는 스택 메모리에 할당되며,
      sonata에는 Car 클래스의 인스턴스가 생성된 힙 메모리의 주소가 대입됨
      (즉, 스택에 저장된 sonata 변수가 힙에 저장된 인스턴스를 가리키게 됨)
    Stack →→→→→ Heap
    sonata → → → → → Car 클래스의 인스턴스

    Stack

    자료가 상자처럼 쌓이는 자료 구조를 말함

    마지막에 추가된 자료부터 순서대로 꺼내서 사용할 수 있으며
    LIFO(Last In First Out) 구조라고 부름

    • 지역변수가 저장되는 영역이며, 한쪽은 막혀있고 한 쪽은 열려있는 구조
    • 메소드가 호출될 때 메모리에 할당되는 영역
      메소드의 매개변수와 메소드 내부의 지역변수가 임시로 저장됨
    • 메소드를 호출할 때마다 각각의 스택프레임(해당 메소드만을 위한 공간) 생성
    • 메소드 호출시 먼저 사용되는 변수가 아래쪽부터 저장되며
      메소드 호출이 끝나면 마지막에 저장된 것부터 해제됨
    • ex) int clacSum(int kor, int eng, int mat){
      int total = kor + eng + mat;
      return total; }
      kor, eng, mat 매개변수와 total 지역변수가 스택 메모리에 할당됨
    저장 순서 변수 해제 순서
    total
    mat
    eng
    kor

    자바의 메모리 구조에 대해 간단하게 살펴보았습니다.

    스택 구조는 먼저 저장된 것이 나중에 나간다는 특징이 있습니다.

    다양한 문제로 응용되기도 하기 때문에 스택이라는 자료 구조가
    어떻게 생겼다는 것 정도는 알아두면 나중에도 도움이 될 것 같습니다.

    또한 객체 생성시 변수는 스택 메모리에,
    인스턴스는 힙 메모리에 나누어져 저장된다는 점을 기억해 두시면 좋을 것 같습니다.

    'JAVA > JAVA' 카테고리의 다른 글

    Java | Array 배열  (0) 2020.01.28
    Java | Static 정적 변수 & 정적 메소드  (0) 2020.01.28
    Java | This  (0) 2020.01.22
    Java | 메소드 Overloading & 생성자 Overload  (0) 2020.01.22
    Java | Constructor 생성자  (0) 2020.01.22

    댓글

Designed by Tistory.