자바 소스코드로 작성한 것을 기계가 읽을 수 있도록 컴파일러(javac)가 바이트코드로 변환한다. 이 때 확장자가 .class이다. 바이트코드 라는 것은 JVM(가상머신)이 이해할 수 있는 언어로 어떠한 플랫폼에서도 JVM 위에서 실행할 수 있다. (Window, Linux, MAC 어디서든 사용 가능)
처음 JDK를 설치하고 환경 변수를 설정 했던 게 JVM 위에서 실행시키기 위한 과정이었다. 이클립스는 연결만 시켜줬던 것이고 실제 실행 시켜 주는 것은 JVM이라는 것을 알아두자!
-콘솔창(cmd)에서 검색을 하고 소스 파일로 이동(cd)해서 파일 확인도 가능하다(수업)
다시 그림을 보면서 위에 했던 말을 반복하자면.. 자바 소스를 만들면 자바 컴파일러(javac)가 클래스 파일로 바꿔준다. 이 클래스 파일을 컴파일 시키면 JVM으로 간다. 그 안에서는 무슨 일이 벌어지고 있을까? 클래스로더가 그것을 가지고 와서 연결을 시킨다. 그것을 익스큐션 엔진이 실행을 시켜준다. 가비지 컬렉터는 말 그대로 메모리 관리를 자동으로 해주는 부분이다. 런타임 데이터 지역은 기억저장소라고 할 수 있다.
1 Method Area
JVM에서 읽은 클래스와 인터페이스에 대한 런타임 상수, 메소드와 필드, Static 변수, 메서드 바이트 코드 등을 보관한다.
2 Heap Area
Scanner와 같이 new 연산자를 이용해서 만든 모든 객체를 Heap에 저장한다.
실질적인 값이 들어가는 곳
3 Stack Area
갑자기 일어난 임시 데이터, 메서드 호출시 생성되는 스레드 수행정보를 기록하는 Frame 저장, 메서드 정보, 지역 변수, 매개 변수 등 이곳에 들어간다.
4 PC Register
프로그램 카운터
지금 실행중인 JVM의 주소를 가지고 있다.
5 Native Method Stack
자바 바이트코드가 아닌 C/C++ 등 다른 언어로 작성된 메서드를 저장하고 있다.
Method와 Runtime Constant Pool, Heap 영역은 모든 스레드에서 공유할 수 있다.
'개발일지 > Java + Spring' 카테고리의 다른 글
[Java] 0924 클래스의 구조 / 상위 클래스를 상속 받은 클래스 (0) | 2021.09.24 |
---|---|
[Java] 팩토리얼 + 피보나치 수열로 재귀함수 배우기 (0) | 2021.09.22 |
[Java] 함수 설명 + 만드는 방법 (1) | 2021.09.17 |
[Java] File 함수로 파일 탐색 + try-catch 예외처리 (0) | 2021.09.17 |
[java] 배열의 설명과 예제 (0) | 2021.09.17 |