본문 바로가기
프로그래밍/JAVA

[JAVA] Java TPC 강의 정리 (PART 1) - JVM

by 소소로드 2020. 9. 15.
  • 1. 자바의 구동방식(JVM)
  • 2. JVM의 메모리 모델
  • 3. 변수와 메서드

1. 자바의 구동방식(JVM)

불완전한 파일을 실행가능하게 만들어주는 실행 엔진이 JVM(Java Virtual Machine)이다.
간단히 구동 방식에 대해 설명하자면, 프로젝트 안에 이런 식으로 있을 경우

bin - TPC01.class (byte code) c\Java~src\java.exe TPC01
src - TPC01.java (소스 파일) c\Java~src\java.exe TPC01.java

1차 컴파일
bin안에 있는 .class 이런 네임은 불완전한 단계라고 볼 수 있다.
이 파일을 실행할 때는 JVM이 함께 구동되며
TPC01은 JVM에서의 1차 컴파일을 통해 byte code를 읽어오게된다.

2차 컴파일 
해당 byte code를 Window OS, Linux OS등의 해당 OS의 리소스에 맞게
재 컴파일 하게 된다. 해당 코드를 메모리에 올려서 완전한 소스 파일로 실행이 된다.

=> 어떤 OS에서 사용될 지 모르므로 어디서든 독립적으로
사용할 수 있게 할 수 있게 만든 것이 자바언어
가상머신에 의해 실행되기 때문에 좀 느리다는 단점이 있다.



2. JVM의 메모리 모델

1
2
3
4
5
6
7
8
9
10
11
12
public class TPC {
    public static void main(String[] args) {
        int a = 10; int b = 20;
         int z = add(a ,b);
        System.out.println(z);
    }

    public static int add(int a, int b) {
           int sum = a+b;
        return sum;
    }
{
cs

해당 코드가 실행되는 절차는 다음과 같다.

1. JVM이 실행되면서 해당클래스를 현재 디렉토리에서 찾는다.
2. 찾게되면 클래스의 내부에 있는 static 키워드가 있는 메서드는 byte code(기계어 코드)가 저장되는 method Area static zone에 자동으로 담기게 된다.(아직실행 전)
3. static zone에서 main() 메서드부터 실행한다. 그러면 이 정보는 stack Area로 새롭게 들어간다. stack Area에서 우리가 아는 a= 10; 이 할당되는 것이다.
4. 자세히 보면 main()안에 add()가 있는 게 아니라 main()밖에 있는데 만약 add()에 static을 붙여주지 않으면 당연히 같은 zone에 있지 않으므로 호출할 수가 없다.
5. 메서드가 종료되면 stack Area에서 사라진다. (LIFO구조)

method Area
(byte code가 저장)

static zone
main(), add()

non-static zone

stack Area
(메서드가 호출되면 
호출정보가 저장)

add a=10 b=20....

main a=10...
 

쉽게 말해서 코드를 적고 저장해서 실행할 때 JVM이 동시에 실행되고,
메서드들이 static으로 정의되어 있으면 method Area의 static zone에 가서 대기하고 있다가
값을 할당한다.


3. 변수와 메서드

(1) 변수

int a = 10;

1. 한 칸에 들어간 10이라는 int형 데이터의 주소에 a가 가리키고 있는 모습이다.
2. 변수는 데이터를 한 개만(한 개의 형태)을 저장한다.

(2) 메서드

public int sum(int a, int b) {
  return a+b
}

1. 메서드는 동작을 한 후, 데이터를 한 개만 만들어 낸다.
2. 메서드에서는 리턴하는 값은 메서드 이름에 저장된다.  즉 메서드의 이름이 변수 역할을 한다. 결국 int sum = a+ b와 같음