liebus

Java Memory구조 본문

예전꺼(2014년이전꺼)/Java Story

Java Memory구조

리베스 2009. 5. 22. 01:29


- Java 가 구동되는 기본 환경인 JVM(Java Virtual Machine)  의 구조에 대해 살펴 본다.
  아래의 구조는 HotSpot (Sun Microsystems의 JVM을 기준으로 한다.)




1. Java Virtual Machine 이란 ?
   - ByteCode 라 불리우는 명령어들의 집합과 각 명령어의 의미를 정의한다. 

   - ByteCode가 전송되고, Class 가 각각의 플랫폼에 독립적으로 동작할 수 있도록 해주는
     바이너리 형식의 Class 파일

   - 프로그램에 문제가 있는지 없늕 확인 하는 알고리즘 - Verification 알고리즘

   - 이런 일들을 한다. 고로 모든 Java program을 구동할려면 
      해당 플렛폼의 JVM이 설치 되어 있어야 한다.


2. Java 의 메모리 구조
   - Java의 Heap Memory 구조를 살펴 본다.

   - Java의 Memory는   크케   New/Young, Old, Perm영역 이렇게 3가지로 구분된다. 
   
   - New Object space : 새로 생성된 객체들을위해 존재 한다. 
                                        이는 다시 Eden, Survivor1, Survivor2 로 구분되어 진다. 
   - Old Object space   : 객체가 만들어진 후 오래된 객체들을 위해 존재 한다.
   - Permanent space   : java class, method Code등이 저장 되는 영역 이다.
                 

이를 그림으로 표현 하면


 Eden  Survivor 1  Survivor 2  Old Perm 
|<----------------------------------------> | <---------------------------------> |<------>|
                         New / Young                                                 OLD                             Perm
|<-------------------------------------- Total Heap --------------------------------------->|



   - Java 에는 GC - Garbege Collection - 이란 메커니즘이 동작 하는대 이는 Java Application에서
      사용하지 않는 메모리를 자동으로 수거하는 기능을 말한다. 이 GC가 Java Heap 에서 어떻게 동작
      하는지 알아 보자

   - 먼저 자바의 객체가 생성되면 재일 먼저 Eden 영역에 저장된다.
     이렇게 생성된 객체는 minor GC가 발생하면서 살아 있는 객체는 Survivor 2 영역으로 복사하고 
     Eden 영역을 Clear 한다. 
     이후 다음번 minor GC가 발생하면 Survivor2 와 Eden 영역에 살아 있는 책체를
     Survivor1
으로 복사 되고 이 영역 Clear 시킨다. 
     이런 식으로 minor GC를 수행하다가, Survivor 영역에서 오래된 객체는 Old 영역으로 이동하게 
     된다. 

   - 이렇게 OLD영역에 쌓인 객체는 Full GC가 일어 나면서 Clear 된다.

   - Minor GC 의 알고리즘을 Copy & Scavenge 이라 한다. 
   - Full GC 의  알고리즘을 Mark & Compact 라 한다. 

   - 주의 할점은 이 Full GC 가 발생할때 Java Application은 완전히 멈춰 버리며
     속도 또한 상당히 더디다.


Java Programing을 하면서 가장 기본이 되는 JVM의 구조와 GC에 대해 간략 하게 적어 보았다.




3. 다른 관점의 Java memory 영역 설명
   - Class Area : Code와 상수가 저장된다.
   - Java Stack : Application 수행 도중 Method의 호출기록과 관련된 Data들의 정보를 기록한다.
   - Heap : 객체가 저장된다.
   - Native mehod stacks : Native Object들이 있는 공간. OS 차원에서 결정됨
   - Permanent Space      : java class, method Code등이 저장 되는 영역


참고 자료: 인터넷에 떠도는 문서와 필자가 알고 있는내용 종합

'예전꺼(2014년이전꺼) > Java Story' 카테고리의 다른 글

Java Decompiler  (0) 2010.07.20
transient, volatile  (0) 2010.03.24
System.getProperty()  (0) 2009.07.31
Java Memory - 그 두번째 ClassLoader  (0) 2009.05.22
Java Story 그 첫번째 - References  (0) 2009.02.25
Comments