IT/Programming / / 2023. 4. 17. 10:37

<JAVA 메모리관리> JVM과 그 구조

반응형

개발자는 소스코드를 작성하고 나서 실행을 시키면 컴파일러가 .java의 파일을 .class(byte code)로 변환 시켜줍니다.

변환을 하고 나면 Class Loader가 .class 파일을(라이브러리 파일 포함) 가져옵니다.(Load)

Class Loader는 로드한 Class파일을 메모리 영역에 올려주는 역할을 합니다.

메모리 영역에 올라간 Class파일은 실행엔진에 의하여 실행되게 됩니다.

 

① Class Area

메모리 영역안에는 메소드 영역(클래스 영역)이란 곳이 존재합니다.(JVM이 실행될 때 생성)

Type정보를 가지고 있는 영역이며 총 6개의 정보를 저장합니다.

  • Field Information : 멤버변수의 이름, 데이터 타입, 접근 제어자에 대한 정보
  • Method Information : 메서드의 이름, 리턴타입, 매개변수, 접근제어자에 대한 정보
  • Type Information : - Type의 속성이 Class인지 Interface인지의 여부 저장
    • Type의 전체이름(패키지명+클래스명)
    • Type의 Super Class의 전체이름 (단, Type이 Interface이거나 Object Class인 경우 제외)
    • 접근 제어자 및 연관된 interface의 전체 리스트 저장
  • 상수 풀(Constant Pool)
    • Type에서 사용된 상수를 저장하는 곳(중복이 있을 시 기존의 상수 사용)
    • 문자 상수, 타입, 필드, Method의 symbolic reference(객체 이름으로 참조하는 것)도 상수 풀에 저장
  • Class Variable
    • Static 변수라고도 불림
    • 모든 객체가 공유 할 수 있고, 객체 생성 없이 접근 가능
  • Class 사용 이전에 메모리 할당
    • final class 변수의 경우(상수로 치환되어) 상수 풀에 값 복사

② Stack Area

- Last In First Out (LIFO)

- 메서드 호출 시마다 각각의 스택프레임(그 메서드만을 위한 공간)이 생성

- 메서드 안에서 사용되어지는 값들 저장, 호출된 메서드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장

- 메서드 수행이 끝나면 프레임별로 삭제

 

③ Heap Area

- new 연산자로 생성된 객체와 배열을 저장하는 공간

- 클래스 영역에 로드된 클래스만 생성가능

- Garbage Collector를 통해 메모리 반환

 

i) Permanent Generation

- 생성된 객체들의 정보의 주소 값이 저장된 공간

 

ii) New Area

- Eden : 객체들이 최초로 생성되는 공간

- Survivor : Eden에서 참조되는 객체들이 저장되는 공간

 

iii) Old Area : New Area에서 일정시간이상 참조되고 있는 객체들이 저장되는 공간

 

④ Native method stack area

- 자바 외의 다른 언어에서 제공되는 메서드들이 저장되는 공간

 

⑤ PC Register

- Thread가 생성 될 때마다 생성되는 공간

- Thread가 어떤 부분을 어떤 명령으로 실행할 지에 대한 기록

- 현재 실행되는 부분의 명령과 주소를 저장

반응형

'IT > Programming' 카테고리의 다른 글

<JAVA 메모리 관리> JVM  (2) 2023.04.17
<JAVA 메모리관리> 객체 사용후 null 할당  (0) 2023.04.17
<디자인 패턴> Singleton 패턴  (0) 2023.04.17
<디자인 패턴> Factory 패턴  (0) 2023.04.17
[HackerRank] Day 9: Recursion  (0) 2023.04.17
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유