jar에 대한 고찰
우리는 스프링을 배포하기 위해 jar파일을 만들어 도커로 해당 환경을 jdk or jre의 환경위에 올려서 배포한다.
그렇다면 이 jar 파일은 무엇일까? jar의 약자는 java archive이다. 자바의 저장소?라는 의미 정도로 생각할 수 있다.
스프링 프로젝트를 빌드(컴파일)하게 되면 jar파일이 생기는 것을 볼 수 있다.
이 파일을 까보면
클래스 파일들의 집합인 것을 볼 수 있다.
빌드를 하게 되면 컴파일러에 의해 .java 파일들이 바이트 클래스 형태로 바뀐다.
이제 jre와 jdk 차이점을 알아야한다.
jdk (java development kit )= jre + 컴파일러
jre( java runtime environment ) = jvm + class library ( 자바 코드를 작성하면서 자주사용 여러 유용한 기능들을 모아놓은 클래스 집합)
여기서 중요한 것은 jar파일을 실행하는데 필요한것은 jre만 필요한 것이다.
자바의 실행 단계를 보면
1. java 파일을 컴파일 한 후 클래스 파일로 만든다.
2. 클래스 파일( jar ) 을 jre의 클래스 로더에 의해 로딩되어 실행된다.
이렇게 볼 수 있다.
우리가 스프링 프로젝트를 빌드하게 되면 jdk의 컴파일러에 의해 jar파일로 로딩되어 더이상 컴파일러는 필요없게 된다.
[JAVA] ☕ JVM 내부 구조 & 메모리 영역 자세히 정리
저번 포스팅에서는 JRE / JDK / JVM에 대해서 간략하게 알아보는 시간을 가졌다면, 이번 포스팅에서는 JVM의 내부 구조에 대해 좀 더 자세하게 알아보도록 할 예정이다. 지난 시간에 자바 애플리케이
inpa.tistory.com
https://swk3169.tistory.com/182
JVM(Java Virtual Machine) & 메모리 구조 (Java Application이 실행될 때 JVM에서 일어나는 과정)
Goal JVM의 특징에 대해 이해할 수 있다. JVM의 구조에 대해 이해할 수 있다. JVM의 메모리 구조를 알 수 있다. Introduction JVM 은 Java Virtual Machine 으로 Java를 OS에 독립적으로 실행될 수 있게 하는 주체..
swk3169.tistory.com
클래스 로더(Class Loader)
- JVM 내로 클래스 파일(*.class)을 동적으로 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈
- 로드된 바이트 코드(.class)들을 엮어서 JVM의 메모리 영역인 Runtime Data Areas에 배치
- 클래스를 메모리에 올리는 로딩 기능은 한번에 메모리에 올리지 않고, 어플리케이션에서 필요한 경우 동적으로 메모리에 적재
- 실행 엔진(Execution Engine)
- 인터프리터(Interpreter)
- JIT 컴파일러(Just-in-Time)
- 가비지 콜렉터(Garbage collector)
- 런타임 데이터 영역 (Runtime Data Area)
- 메소드 영역
- 힙 영역
- PC Register
- 스택 영역
- 네이티브 메소드
- JNI - 네이티브 메소드 인터페이스 (Native Medthod Interface)
- 네이티브 메소드 라이브러리 (Native Method Library)