어플리케이션이 실행되면 JVM이 OS로부터 메모리를 할당받는다
→ JVM이 할당받은 메모리를 용도에 따라 영역을 구분하여 관리해준다.
자바 컴파일러가 자바소스코드(.java 우리가 작성한 코드 파일)를 읽어 바이트코드(.class)로 변환한다
ClassLoader를 통해 바이트코드를 JVM으로 로딩한다 ( 이제부터 객체들이 메모리로 올라오는 작업을 한다)
로딩된 바이트코드는 실행엔진을 통해 해석된다.
해석된 바이트 코드는 Runtime Data Areas에 실행된다. 실행되는 과정에서 GC 과정이 수행된다.
💡 클래스를 메모리에 올리는 로딩기능은 한번에 메모리에 올리지 않고 어플리케이션이 필요해서 호출할 경우 메모리에 적재하게 된다.
로딩기능 : loading → linking → initialization
💡코드 실행방식
1) Interpreter
바이트코드를 해석하여 실행하는 역할. 실행할때마다 매번 새로 수행2) JIT Compiler
코드를 발견하여 전체 바이트 코드를 컴파일하고 그것을 Native Code로 변경하여 사용변환 작업은 interpreter에 의해서 지속적으로 수행되지만, 필요한 코드의 정보는 캐시에 담아 두었다가 재사용한다.