* 응용 프로그램이 실행되면 JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당 받고, JVM은 메모리를 용도에 따라 여러 영역으로 나누어서 관리한다.

 

 

1. 코드 (Code) 영역

컴파일된 .class 코드 영역 (=클래스 영역 / 코드 영역 / 메소드 영역 - 이라고도 불린다)

0과 1로 된 2진수(binary)

static 변수 / static 메소드 (= static 영역이라고도 불린다) : class가 실행되기 전에 미리 메모리가 확보됨

 

 

2. 스택 (Stack) 영역 ( <=> 큐 )

가장 늦게 들어온 것부터 처리함

(ex. 함수 / 메소드 => A a = new B(); 시 B() 생성자 메소드를 호출하는게 아닌 뒤늦게 만들어진 인스턴스 a를 호출하는 것)
main() 메소드가 가장 먼저 호출됨 (지역변수를 저장할 메모리가 필요하니까)

 

 

3. 힙 (Heap) 영역

객체 인스턴스 (new 키워드가 들어가는)는 무조건 heap에 만들어짐 (생성자 메소드)

호출되는 클래스 내의 메소드들도 저장됨

 

* 만들어지는 순서 : code > stack > heap

* 종료되는 순서 : heap > stack > code

 

 

4. 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.example.java;
 
//CallStackTest : method area
public class CallStackTest {
//  str : stack(정적 메모리)
    String str = "홍길동";
    
//  main method : call stack(정적 메모리)
    public static void main(String[] args) {
//      main method에서 firstMethod() 메소드를 호출했기 때문에 먼저 호출됨
        System.out.println("console> main method() 시작");
        
        firstMethod();
        
        System.out.println("console> main method() 끝");
    }
    
//  firstMethod() method : Heap(동적 메모리)
    public static void firstMethod() {
        System.out.println("console> firstMethod() 시작");
        
        secondMethod();
        
        System.out.println("console> firstMethod() 끝");
    }
    
//  secondMethod() method : Heap(동적 메모리)
    public static void secondMethod() {
        System.out.println("console> secondMethod()");
    }
}
cs

 

 

'BackEnd > Java' 카테고리의 다른 글

Java :: 간단한 JDBC 예제  (0) 2016.10.18
Java :: 스레드(Thread)  (0) 2016.10.12
Java :: 자바 소켓 프로그래밍(TCP)  (0) 2016.10.09
Java :: 업캐스팅(UpCasting) vs 다운캐스팅(DownCasting)  (0) 2016.10.05
Java :: final과 static  (0) 2016.09.30

+ Recent posts