자라는 재미들/코코아

자바 메모리 구조

자란다 2021. 11. 29. 23:39
728x90
반응형

자바 메모리 구조 알아보기

*Q. *메모리 구조를 알아봐야하는 이유?
*A. *한정된 자원에서 최고의 성능을 낼 수 있도록!
같은 기능의 프로그램이더라도 메모리 관리에 따라 성능이 좌우된다.

java프로그램은 JVM이라는 프로그램에 종속적이기때문에 os에서는 독립되어서 다양한 os 에서 사용가능하다. 대신 JVM을 실행시키고 JVM으로 프로그램을 실행시키다보니 OS에 직접 제어받는 방식보다 속도면에서 느리다.

jvm이란?

  • 자바가상머신
  • 자바와 운영체제 사이의 중계자 역할
  • 자바가 운영체제에 종속되지 않게 해줌
  • 메모리 관리 기능(Garbage Collection)

JVM(java.exe)은 무엇을 하는가?

  • 메모리를 할당한다
  • 바이트코드를 운영체제에 맞추어 번역,실행한다.

JVM메모리 구조

자바 소스 파일은 자바 컴파일러에 의해 바이트 코드로 되고, 클래스 로다가 읽어들이면서 JVM이 수행된다.

Class loader subSystem

클래스 파일을 로딩한 뒤 검증하고 초기화한다.
Class파일을 메모리(Runtime Data Area)에 적재하는 기능

runtime DataArea

클래스 파일을 저장하는 runtime DataArea
여기는 class area, heap, java stacks,
pc registers, native method stacks 이렇게 5가지의 영역으로 나누진다.
프로그램을 수행하기 위해 OS에서 할당 받은 메모리 공간

  • Class area
    모든 쓰레드가 공유하는 클래스 영역이다. 메소드 영역은 클래스, 인터페이스, 메소드, 필드, static, 변수 등의 바이트 코드를 보관한다.

  • Heap area
    모든 쓰레드가 공유하며, new연산자로 생성된 객체와 배열이 생성되는 영역이다.
    또한, 클래스 영역에 로드된 클래스만 생성이 가능하고 garbage collcetor가 참조되지 않는 메모리를 확인하고 제거하는 영역이다.
    모든 객체들은 힙에 저장된다.

  • Stack area
    Last In First Out (LIFO)
    메소드 호출 시마다 각각의 스택(그 메소드만을 위한공간)이 생성된다. 그리고 메소드 안에서 사용되는 값들을 저장하고, 호출된 메서드의 매개변수, 지역변수, 리턴 값 및 연산시 일어나는 값들을 임시로 저장한다. 마지막으로, 메소드 수행이 끝나면 프레임별로 삭제한다.
    함수 호출시 지역변수는 스택에 있다. 스택은 접시마냥 아래에서 위로 쌓인다. 접시쌓기 게임을 생각해보자!

  • PC Register
    쓰레드가 시작될 때 생성되며, 생성될 때마다 생성되는 공간으로 쓰레드마다 하나씩 존재한다. 쓰레드가 어떤 부분을 무슨 명령으로 실행해야할지에 대한 기록을 하는 부분으로 현재 수행중인 JVM명령의 주소를 갖는다.
  • Native method stack
    자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역이다.

Execution engine

클래스파일을 플랫폼에 맞는 기계어로 변환시켜 실행한다.

Garbage Collector

Heap 메모리에 생성된 객체 중에서 참조되지 않는 객체들을 탐색후 삭제해서
삭제된 객체의 메모리를 반환한다.


참고
https://re-build.tistory.com/2?category=705468
https://cafe.naver.com/jjdev/227

728x90
반응형