티스토리 뷰

1월 27일 힙, 메모리, 스택 브리핑

복습: No
작성일시: 2022년 1월 27일 오전 9:37

  1. 스택 메모리란?

    • STACK
      • 위에서부터 아래로 쌓아가는 스택..
    • 함수 호출시 생성되는 지역변수 | 매개변수가 저장됨, 함수 호출이 완료되면 사라집니다...
    • LIFO(후입 선출)
    • 스택메모리에는 실행중인 모든 메서드에 대해 새로운 메모리 블록이 할당됩니다
    • 스택메모리의 크기는 고정되어 있고, 일단 생성되면 증가나 축소 불가
    • 해당 메모리에 대한 엑세스는 힙 메모리에 비해 빠르다
    • 스레드도 stack 영역에 생성, 1개의 스레드는 별개의 T Memory(stack,static, heap)을 갖게 됩니다 이로 인해 하나의 스레드는 다른 스레드로 접근이 불가능하지만, static과 heap은 공유가 가능합니다
    • StackOverFlowError 발생이유
      • 스택 메모리는 고정되어 있으며 한번 생성되면 확대나 축소 불가능!
        • 스택 메모리를 모두 사용한다면 앞으로의 메서드 호출 불가능하기에 StackOverFlowError 발생
          • 메서드를 재귀적으로 호출하는데 그 호출에 끝이 없는 경우 실행할 메서드가 계속해서 쌓이게 되면서 StackOverFlow 에러가 발생하기도 합니다
      • 해결방안?
        1. 컴파일러 옵션에서 stack 영역의 크기 증대
        2. 함수에서 사용하는 지역변수의 크기 축소
        3. 지역 변수를 전역변수로 바꾸기
  2. 힙 메모리란?

    • HEAP
      • 쌓아올린 더미!
    • 생성된 인스턴스(객체)들이 올라갑니다
    • 공간이 동적으로 할당되고 해제!
    • JVM이 어플리케이션을 실행할 때까지 메모리를 할당하고 시작할 때 생성합니다
    • 힙 공간에 생성된 객체는 응용프로그램의 모든 위치에서 액세스가 가능합니다
    • 가바지 컬렉터에 의해 참조가 없는 객체는 제거하면서 메모리 정리 작업이 수행됩니다
    • FIFO (선입 선출)
      • 메모리의 낮은 주소에서 높은 주소의 방향으로 할당 (위 > 아래)
    • OutOfMemoryError 발생
      • 힙 메모리 부족으로 발생합니다
    • 해결방안
      • JVM 설정으로 최소 최대 메모리 할당을 증가
  3. static 메모리?

    • Static
      • 정적 메모리
    • 컴파일 시간 동안 할당된 메모리며
    • 고정된 공간을 가지고 런타임 중에 변경 할 수 없는 메모리
    • 정적 메로리는 공유되는 자원으로 퍼포먼스의 저하를 가지고 올 수 있습니다.

메모리의 구조

메모리의 구조

힙과 스택의 비교

힙과 스택의 비교

힙과 스택에서 메모리가 차는 방향!

힙과 스택에서 메모리가 차는 방향!

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함