-> 컴파일러가 자바 소스를 바이트코드로 변환한다. Class loader 가 바이트 코드를 런타임 데이터 영역에 로드시킨다. 로딩된 바이트 코드가 실행엔진에 의해서 실행되게 된다.
- PC Register : 현재 수행중인 명령어를 가지고 있다.
- Stack Area : 함수에 대한 정보를 가지고 있다.
- Native Method Stack : java 외에 다른 언어들이 들어가 있다.
- Heap Area : 사용자가 사용하면서 생긴 데이터가 동적 할당된다.
- Method Area : 각 클래스별로 전역변수, 정적변수, 메소드 정보들이 저장된다.
-> 우선 스레드마다 PC Register, JVM Stack, Native Method 가 있고, 스레드 공통으로 Heap Area, Method Area 가 있다.
-> JVM 에서 메모리를 관리해주는 모듈이다. Heap 메모리를 재활용하기 위해서 더 이상 참조되지 않는 객체들을 메모리에서 제거하는 모듈이다.
-> 개발자가 메모리를 직접 정리하지 않아도 되어 개발 성능이 향상되는 장점
-> Mark and Sweep 과정에서 참조되지 않는 객체를 찾는 과정이 있는데, 이때 스레드가 잠깐 중단되어서 성능이 떨어진다는 단점
-> 현실 세계의 사물같은 객체를 만들고, 객체에서 필요한 특징을 뽑아 프로그래밍 수행
-> 추상성, 상속성, 캡슐화, 다형성
-> 추상클래스는 abstract 지시자로 정의되어서 추상메소드가 하나 이상 포함되는 클래스이다. 인터페이스는 interface 지시자로 정의되어서 모든 클래스가 추상메소드로 정의된다.
-> 추상 클래스는 기능을 재활용하고 확장시키는 목적이 있고, 인터페이스는 함수의 구현을 강제해서 구현한 객체들이 같은 동작을 하는 것을 보장하는 것에 그 목적이 있다.