ToBe끝판왕

[ JAVA ] JVM 정의 및 메모리 사용 영역 본문

■ 프로그래밍 SKILLS/JAVA

[ JAVA ] JVM 정의 및 메모리 사용 영역

업그레이드중 2022. 5. 16. 10:53
반응형

 


 

 

JVM

▶  정의

자바가상기계 ( Java virtual Machine ) 으로 바이트코드 파일을 운영체제를 위한 완전한 기계어로 변역하고 실행하는 역할

 

▶  JVM의 구성

 

1) 자바 인터프리터

자바 바이트 코드를 읽고 해석하는 역할

 

2) 클래스 로더

자바는 동적으로 클래스를 읽어오므로 프로그램이 실행중인 런타임( Runtime ) 이 되어야 모든 코드가 JVM과 연결된다.

 

3) JIT 컴파일러

프로그램이 실행중인 런타임( Runtime )때 실제 기계어로 변환해주는 컴파일러

 

4) 가비지 컬렉터

더는 사용하지 않는 메모리를 자동으로 회수해주는 역할 ( 개발자는 따로 메모리 관리 필요 X )

※ 바이트코드 파일 ?

자바가성머신( JVM )이 이해할 수 있는 언어로 변환된 자바 소스 코드

변환되는 코드의 명령어 크기가 1byte라서 자바 바이트코드라고 부른다.

자바 바이트코드의 확장자는 .class 이고 JVM만 설치되어 있으면 어떤 운영체제에서도 실행이 가능하다.

▶  JVM의 메모리 사용 영역

1) 스태틱( static ) 영역

•  패키지나 클래스 정보( 클래스 데이터 ) 가 올라간다.

   - 패키지나 클래스는 실제로 호출될 때, 올라가게 된다.

•  static 영역에 있는것은 어떤 곳에서나 접근이 가능해지기 때문에, "전역"이라는 키워드를 사용

•  static 변수는 읽기 전용이 아닌 경우에는 가능한 사용하지 X

•  class 영역 / method 영역이라고도 불린다.

•  static 영역에 자리잡으면 JVM이 종료될 때까지 사라지지 않고, 고정된( static ) 상태로 유지

•  필드 부분에서 선언된 전역변수, static 키워드가 붙은 자료형 혹은 메서드

2) 스택( stack ) 영역

•  중괄호 { 를 만날때 마다 스택 프레임이 하나씩 생기고, 닫는 중괄호 } 를 만나게 되면 스택프레임이 사라진다.

    - 메서드가 실행될 뿐 아니라, if문 , 반복문, 예외처리를 위한 try문 등 모두 스택 프레임이 생김

•  stack 내부에서 선언된 지역변수는 stack 영역에 올라간다.

•  기본형 타입 변수값들은 stack 영역에 저장되고, 참조형 타입 변수는 참조값만 저장됨

•  메서드를 호출하는 것은 별개의 스택프레임이기 때문에 스택프레임을 넘어서 접근 불가능

•  쓰레드( thread )도 스택영역에 생기게 된다.

   - 하나의 쓰레드는 내부적으로 별개의 T메모리구조( static, stack, heap )영역을 가지게 된다.

   - 하나의 쓰레드는 다른 쓰레드로 접근 할수 없지만, static 영역과 heap 영역은 공유해서 사용이 가능하다.

•  main()을 포함한 각 메서드의 호출시 생성되는 지역변수와 매개변수

   - 메서드 실행이 완료되면 스택에서 제거됨 

3) 힙( heap ) 영역

•  생성된 객체( 인스턴스 ) 들이 올라간다.

•  인스턴스 필드들은 heap 영역에 올라간다.

•  어떤 참조변수도 heap 영역의 인스턴스를 참조하지 않게 된다면, 가비지컬렉터에 의해 메모리에서 사라지게 된다.

•  상속을 이용한 인스턴스를 만들었다면, 상위 클래스들의 인스턴스들도 같이 생성

    ( 최상위 object 까지 )

•  new 연산자를 이용해서 메모리를 할당하는 것 ( heap에 할당 )

•  객체와 배열이 생성되는 공간 / 참조타입( 배열, 열거, 클래스, 인터페이스 )들을 힙영역에 주소형식으로 저장

반응형
Comments