본문 바로가기

Java/Java Basic

01. JDK와 JRE, JVM

* 이 글은 인프런 Java TPC 강의를 보며 정리한 글이다. OOP를 자세히 공부하기 위해 서치 하다가 찾게 된 강좌인데 내용이 상당히 좋음.

1. JDK (Java Development Kit)

- java를 설치 한다는 것은 java JDK를 설치한다는 의미

- JDK는 개발하는데 필요한 라이브러리와 플랫폼이 포함되어 있다.

- 즉, JDK를 설치하면 JavaSE, JavaEE, JavaME, Java Android 개발환경이 구축됨을 의미함 (compiler, API, JVM등)

 

2. JRE (Java Runtime Environment)

- java 실행 환경

- java 프로그램을 실행하기 위해서는 JRE만 있으면 되지만 프로그램을 개발하기 위해서는 JDK가 반드시 필요함

 

3. JVM (Java Virtual Machine)

- java 프로그램은 JVM이라는 가상머신이 구동하기 때문에 OS에 독립적으로 실행할 수 있다.

- (1차컴파일) 파일명.class 형식의 byte code → (2차컴파일) 구동될 OS 리소스에 맞게 재컴파일

출처: 위키피디아

 JVM이 사용하는 메모리 영역

- method Area: method의 byte code가 저장되는 영역 (static zone, nonstatic zone으로 나뉨)

- stack Area: method가 호출되면 method의 호출정보가 저장되는 영역 (call stack frame area)

- heap Area: 객체가 생성되는 영역 (예: new 연산자)

- literal Pool: 문자열(객체)상수가 저장되는 영역

JVM이 TPC01 class (실행클래스)를 실행하는 절차 - add() method가 static인 경우

1. 해당클래스를 현재 디렉토리에서 찾는다.
2. 찾으면 클래스 내부에 있는 static 키워드가 있는 method를 메모리에 로딩한다.
      - method Area의 static zone에 로딩 한다. (static이 아닌 경우는 none-static zone에 로딩)
3. static zone에서 main() method를 실행한다. (호출 시작)
4. main() method가 호출되면 main() method의 호출정보가 stack Area에 들어간다. (push)
5. stack Area가 비어 있으면 프로그램이 종료 된 것이다.
public class TPC01 {
	
	public static void main(String[] args) {

		int a = 10; int b = 20;
		int v = add(a, b);;
		System.out.println(v);
		
	}
	
	public static int add(int a, int b) {
		int sum = a + b;
		return sum;
	}

}

JVM이 TPC01 class (실행클래스)를 실행하는 절차 - add() method가 static이 아닌 경우

1. 해당클래스를 현재 디렉토리에서 찾는다.
2. 찾으면 클래스 내부에 있는 static키워드가 있는 메서드를 메모리로 로딩한다.
      - method Area의 static zone에 main() method를 로딩한다.
3. static zone에서 main() method를 실행한다. (호출 시작)
      - main() method가 호출되면 main() method의 호출정보가 stack Area에 들어간다 (push)
4. static Area가 비어 있으면 프로그램이 종료된 것이다.

** static인 main() method는 객체를 생성하지 않아도 메모리에 로딩 할 수 있다. 하지만 static이 아닌 add() method는 객체를 생성하지 않으면 메모리에 로딩이 되지 않는다. 따라서 new 연산자를 사용해 객체를 생성하여 heap Area에 add() method가 로딩되고, 이 heap Area에 할당된 add()는 method Area의 none-static zone에 올라와 있는 기계어 코드인 add(byte code)의 주소를 참조한다. (pointer로 연결되어 있음)

public class TPC01 {
	
	public static void main(String[] args) {

		int a = 10; int b = 20;
		TPC01 tpc = new TPC01();
		int v = tpc.add(a, b); // heap Area
		System.out.println(v);
		
	}
	
	public int add(int a, int b) {
		int sum = a + b;
		return sum;
	}

}

 

반응형

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

02. 변수, 자료형, 할당  (0) 2021.01.01