자바는 객체지향형(OOP) 프로그래밍 언어로, 객체지향의 특징인 캡슐화,상속,다형성 등이 적용되어 있는 언어이다.
장점
JVM(Java Virtual Machine) 위에서 돌아가기 때문에 OS에 독립적으로 실행된다.
Garbage collector 를 통해 자동으로 메모리 관리를 해준다. (이때 Garbage collector는 JVM 에서 제공함)
단점
JVM을 통해 실행되기 때문에 상대적으로 실행속도가 느리다.
OS에 종속받지 않고 CPU가 Java를 인식하고 실행할 수 있게 만드는 머신이다.
자바 프로그램과 OS 사이의 중개자 역할을 하면서 자바 프로그램을 OS에 독립적으로 실행하게끔 해준다.
Java 코드는 Java 컴파일러가 변환하여 바이트 코드를 만들어낸다. 이 바이트 코드는 OS 가 이해할 수 있는 형식이 아니고 JVM이 이해하는 형식이다.
바이트 코드를 OS 가 이해할 수 있는 형식으로 다시 컴파일 하기 위해 JIT 컴파일러가 사용 된다.
이러한 JIT 컴파일러를 OS에 적합한 버전으로 다운로드 받아야 하기 때문이다.
개발자가 작성한 java 코드(.java)는 java 컴파일러(javac)에 의해 바이트 코드(.class)로 변환된다.
이제, JVM은 Class Loader 를 통해서 바이트 코드를 Runtime Data Area 로 옮긴다. 옮겨진 바이트 코드들은 Execution Engine 에 의해 해석 되어 Runtime Data Area 에 알맞는 영역으로 배치 된다.
이 과정에서 Execution Engine 에 의해 Garbage Collectoin 이 수행 된다.
자바 컴파일러에 의해 변환된 바이트 코드를 Class Loader 가 Runtime Data Area에 전달해준다.
이때 Runtime Data Area 는 모든 쓰레드가 공유하는 영역인 Method Area, Heap과 각 쓰레드가 가지고 있는 Stack, PC Register, Native Method Stack 으로 이루어져 있다.
Method Area는 클래스에 대한 정보가 올라오는 영역이다.
Heap 은 new
를 통해 생성된 인스턴스가 생성되는 영역이다.
Stack 은 지역 변수, 매개 변수, 리턴값 등 임시적으로 사용되는 값이 저장되는 영역이다.
PC Register 는 현재 쓰레드가 실행되는 부분의 주소와 영역을 저장하는 영역이다.
Native Method Stack 은 자바가 아닌 다른 Native 언어로 작성된 코드를 실행할 때 사용되는 영역이다.