아틴
Atin
아틴
전체 방문자
오늘
어제
  • 분류 전체보기 (460)
    • Devlopment (246)
      • 정리 글 (20)
      • MicroServices (0)
      • Reactive, Concurrenc.. (12)
      • Java (44)
      • Spring (20)
      • C,C++,Ruby,Python (52)
      • Mobile (39)
      • Web (35)
      • Tip & Info (14)
      • Unit Test (7)
    • Infra (44)
      • OS (21)
      • RDBMS (13)
      • NoSQL&Cache (5)
      • AWS (4)
    • Computer Science (11)
    • Etc (156)

블로그 메뉴

  • Home
  • Guestbook

공지사항

인기 글

태그

  • 해킨토시
  • mysql
  • Ruby on Rails
  • 여행
  • 던젼 앤 드래곤즈
  • Android
  • CSS
  • 아이폰
  • 자바
  • Dungeons & Dragons
  • 안드로이드
  • 전라도
  • Linux
  • Python
  • 정읍
  • C
  • Java
  • jsp
  • javascript
  • TRPG

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
아틴

Atin

JVM 메모리 구조 (JVM Memory structure)
Computer Science

JVM 메모리 구조 (JVM Memory structure)

2017. 9. 30. 10:30
반응형

JVM 메모리 구조 (JVM Memory structure)



  • JAVA Source : 사용자가 작성한 JAVA 코드
  • JAVA Compiler : JAVA 코드를 Byte Code로 변환시켜주는 기능
  • Class Loader : Class파일을 메모리(Runtime Data Area)에 적재하는 기능
  • Execution Engine : Byte Code를 실행 가능하게 해석해주는 기능
  • Runtime Data Area : 프로그램을 수행하기 위해 OS에서 할당 받은 메모리 공간


Runtime Data Area

Method Area

  • Method Area, Class Area, Code Area, Static Area 로 불리어짐
  • JVM이 읽어들인 클래스와 인터페이스 대한 런타임 상수 풀, 멤버 변수(필드), 클래스 변수(Static 변수), 생성자와 메소드를 저장하는 공간
  • 클래스 파일의 바이트 코드가 로드되는 곳
  • 힙이 아닌 영역 (HotSpot JVM 구현에서)
  • 2개의 주요 공간으로 분리됨
    • Permanent Generation
      • 클래스 정의, 구조, 메소드, 필드, 메소드 (데이터 및 코드) 및 상수로부터 클래스 관련 데이터를 저장
      • -XX : PermSize 및 -XX : MaxPermSize를 사용하여 규제 될 수 있음
      • PermGen 공간이 부족하면 java.lang.OutOfMemoryError가 발생할 수 있음
    • Code Cache
      • 캐시 영역은 컴파일 된 코드를 저장하는 데 사용
      • 컴파일 된 코드는 원시 코드 (하드웨어 고유)일 뿐이며, Oracle HotSpot JVM에 고유 한 JIT (Just In Time) 컴파일러가 처리


Stack

  • Last In First Out (LIFO)
  • 메서드 호출 시마다 각각의 스택프레임(그 메서드만을 위한 공간)이 생성
  • 메서드 안에서 사용되어지는 값들 저장, 호출된 메서드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장
  • 메서드 수행이 끝나면 프레임별로 삭제


Heap

  • new 연산자로 생성된 객체와 배열을 저장하는 공간
  • 클래스 영역에 로드된 클래스만 생성가능
  • Garbage Collector를 통해 메모리 반환
  • Permanent Generation : 생성된 객체들의 정보의 주소 값이 저장된 공간
  • New Area
    • Eden : 객체들이 최초로 생성되는 공간
    • Survivor : Eden에서 참조되는 객체들이 저장되는 공간
  • Old Area : New Area에서 일정시간이상 참조되고 있는 객체들이 저장되는 공간


Native Method

  • JNI(Java Native Interface)를 통해 호출되는 C/C++ 등의 코드를 수행하기 위한 스택
  • 네이티브 메소드의 매개변수, 지역변수 등을 바이트 코드로 저장
  • 자바 외의 다른 언어에서 제공되는 메서드들이 저장되는 공간

PC Register

  • 현재 수행 중인 JVM 명령 주소를 갖음
  • 프로그램 실행은 CPU에서 인스트럭션(Instruction)을 수행.
  • CPU는 인스트럭션을 수행하는 동안 필요한 정보를 CPU 내 기억장치인 레지스터에 저장
  • 연산 결과값을 메모리에 전달하기 전 저장하는 CPU 내의 기억장치
  • Thread가 생성 될 때마다 생성되는 공간
  • Thread가 어떤 부분을 어떤 명령으로 실행할 지에 대한 기록
  • 현재 실행되는 부분의 명령과 주소를 저장


JAVA8에서 JVM 메모리 모델 변경사항

Perm 영역이 없어지고 Metaspace 공간으로 변경

PermGen 관련 JVM 옵션 (예 : -XX : PermSize 및 -XX : MaxPermSize)는 이제 무시됨

  • Metaspcae
    • 네이티브 힙 메모리의 일부
    • -XX를 사용하여 조정 가능 MetaspaceSize 및 -XX : MaxMetaspaceSize
    • java.lang.OutOfMemoryError : 네이티브 공간이 고갈되면 메타 데이터 공간이 수신



Reference

[1] JVM PergmGen - Where art thou? (https://www.javacodegeeks.com/2014/09/jvm-permgen-where-art-thou.html)

[2] Java Garbage Collection (http://d2.naver.com/helloworld/1329)

[3] RUNTIME DATA AREA - JABVA'S MEMORY MODEL (http://www.pointsoftware.ch/en/under-the-hood-runtime-data-areas-javas-memory-model/)

[4] How Garbage Collection works in Java (http://javarevisited.blogspot.kr/2011/04/garbage-collection-in-java.html)

반응형
저작자표시 비영리 변경금지 (새창열림)

'Computer Science' 카테고리의 다른 글

DB 트랜잭션 (Transaction)의 ACID 속성과 분산시스템 BASE 속성  (0) 2017.09.30
OOP(객체 지향 프로그래밍) 5원칙 및 특성  (0) 2017.09.30
Java 자료구조 비교  (0) 2017.09.30
TCP vs UDP  (0) 2017.09.30
TCP 3 Way-Handshake & 4 Way-Handshake  (0) 2017.09.30
OSI 7 계층 (OSI 7 Layer)  (0) 2017.09.29
프로세스와 스레드(Process vs Thread)  (0) 2017.09.29
64비트와 32비트의 차이  (0) 2017.09.29
퀵 정렬, 퀵 소트(Quick Sort)  (0) 2017.09.21
계수정렬, 카운팅 소트(Counting Sort)  (0) 2017.09.21
    'Computer Science' 카테고리의 다른 글
    • DB 트랜잭션 (Transaction)의 ACID 속성과 분산시스템 BASE 속성
    • OOP(객체 지향 프로그래밍) 5원칙 및 특성
    • Java 자료구조 비교
    • TCP vs UDP
    아틴
    아틴

    티스토리툴바