JVM은 java 파일을 실행시키는 가상머신
-> 이로인해서 자바실행파일이 운영체제에 독립적일 수 있음
-> 어떠한 운영체제라도 JVM이 설치되어 있으면 java 파일은 실행 가능
But, JVM은 운영체제 종속적이다 -> 운영체제에 따른 jvm 다양한 버전 제공
클래스를 찾을 때 시작점이 되는 위치(경로)
보통은 실행명령을 받은 클래스가 위치한 곳에 존재해야함
-> 하지만, classpath를 설정해주면 그 위치대로 잘 찾아감 .;lib
. 현재 디렉토리
; 경로 구분자 / 의 역할
java -classpath “.;lib” [파일명]
-> 클래스 패스 설정과 동시에 실행
귀찮으면 환경변수를 설정하자!
-> java [파일명]
으로 실행하면 자동으로 클래스패스가 설정된 대로 실행된다.
사진 출처 https://velog.io/@livenow/Java-JVM%EC%9D%B4%EB%9E%80
특정 하드웨어가 아닌 가상 컴퓨터에서 돌아가는 시랳ㅇ 프로그램을 위한 이진 표현법이다
-> 가상머신을 위한 코드
-> JVM 에서 [파일명].java 파일을 컴파일 결과 생긴 [파일명].class 파일을 의미
컴퓨터가 인식할 수 있는 0과 1로 구성된 이진코드를 의미한다
-> 보통 바로 cpu나 os가 인식해 실행가능한 코드를 의미
바이트 코드(.class)파일이 JIT 컴파일러에 의해 바이너리 파일로 변경
JVM 초창기 인터프리터 방식이라 너무 느렸음 -> JIT 컴파일러로 보안
바이트 코드 -> 어셈블러같은 네이티브 코드로 바꿈 -> 변환하는데 비용 많이듬
따라서 인터프리터 방식과 JIT 방식을 섞어서 씀
jvm은 해당 메서드가 얼마나 자주 호출되는지 파악 ->
인터프리터로 하다가 일정 기준 초과 하면 JIT 컴파일러 방식으로 실행
해석 결과 -> 캐싱(저장) -> 또 필요할때 해석안하고 바로 가져온다
Class Loader/ Execution Engine/ Garbage Collector/ Runtime Data Area
Runtime Data Area:
1) Method Area :
모든 쓰레드가 공유하는 공간/
클래스, 인터페이스, 메소드, 필드, Static 변수 정보 등 바이트코드를 보관
jvm 깔때 내 컴퓨터의 2GB 메소드 영역을 쓸게요 —> 2GB, 클래스 복잡 웹 어플리케이션
java8 부터는 Native Area (OS에서 관리하는 메모리 영역) 으로 포함됨.
java heap이 아님.
2) Heap Area:
모든 쓰레드가 공유하는 공간/
new로 생성된거 다 여기 들어감/
GC대상
3) Stack Area:
스레드 하나당 별개의 영역 할당
책에서는 call stack이라고 명함/
메소드 호출 시 그 메서드만을 위한 메모리 공간 생성/
메소드 안에서 사용되는 값 저장/
호출된 메서드의 매개변수, 지역변수, 리턴 값 등을 임시로 저장 /
JRE ( Java Runtime Environment) : 최소한 실행은 가능하게 하자
ex) JVM , 클래스 라이브러리(Java API)
JDK(Java Development Kit) : 개발에 도움이 되는 도구들이 들어있음
ex) javac.exe + JRE