Java 10

2017. 2. 10. 23:26Work/Java

728x90
반응형

JVM

- 로딩(Loading)

클래스 파일을 바이트 코드로 읽어 메모리로 가져오는 과정

- 링크(Linking)

읽어온 바이트 코드가 자바 규칙을 따르는지 검증(Verifing), 클래스에 정의된 필드, 메소드, 인터페이스들을 나타내는 데이터 구조를 준비(Preparing), 클래스가 참조하는 다른 클래스를 로딩(Resolving)

- 초기화(Initializing)

슈퍼 클래스 및 정적 필드들을 초기화

-> 요청되는 순간 메모리에 로딩 (자바의 클래스 로더가 역할 수행, 동적으로 클래스를 읽어 온다.),  클래스 로더가 classpath라는 환경 변수에 등록된 디렉토리에 있는 모든 클래스들을 먼저 JVM에 로딩


동적 클래스 로딩

- 로드타임 동적 로딩(load-time dynamic loading)

public class Hello{

public static void main(String[] args){

System.out.println("Hello world");

}

}

-> 한 클래스의 로드 타임에 필요한 다른 클래스들을 동적으로 로딩하는 것을 로드타임 동적 로딩

- 런타임 동적 로딩(run-time dynamic loading)

public interface PrintInterface{ ... }

public class ClassLoading implements PrintInterface { ... }

-> 런타임 동적 로딩은 컴파일될 때 전혀 알지 못한 클래스를 런타임에 로드하여 실행

-> Dynamic class Loading, 실행 시간 동안 자바 애플리케이션이 클래스를 로딩, '온 디맨드(On-Demand)' 방식으로 요청될 때 메모리에 로드

_온 디맨드 : 이용자의 요구에 따라 서비스가 된다.


클래스 로더 계층 구조

User-Defined Class Loader -> System Class Loader -> Extensions Class Loader -> Bootstrap Class Loader

- Bootstrap Class Loader

JVM이 실행될때 맨 처음 실행되는 클래스 로더, 자바가 아닌 네이티브 코드로 구현되어 있다.

- Extensions Class Loader

Bootstrap Loading 후 기본적으로 로딩되는 클래스로 로딩, classpath에 잡혀 있지 않아도 로딩

- System Class Loader

CLASS PATH에 정의 되거나 JVM option에서 -cp, -classpath에 지정된 클래스들이 로딩

- User-Defined Class Loader

사용자가 직접 생성해서 사용하는 클래스 로더

-> 하위 클래스 로더는 델리게이션 요청에 의해 부모 클래스 로더가 로딩한 클래스를 찾을 수 있지만 반대는 불가능, 클래스 로더에 의해 로딩된 클래스는 언로드될 수 없고 클래스를 로딩한 클래스 로더가 삭제될 때까지 유지


클래스 네임스페이스

-> 하나의 클래스는 클래스명, 패키지명, 클래스 로더로 구분, 동일한 클래스명일지라도 패키지명이 다르면 다른 클래스, 클래스 로더가 다른 경우 다른 클래스


델리게이션 모델

-> 클래스 로더가 클래스 로딩을 요청받게 되면 캐시(cache), 부모 클래스 로더(parent class loder), 자신(self)클래스 로더 순으로 클래스 로딩이 된다. 최상위 부트스트랩 클래스 로더까지 요청이 위임되고 이전에 클래스가 로딩된 적이 없다면 최상위 부모부터 자식 클래스 로더 순서로 클래스 로딩


URL 클래스 로더

URL로 부터 클래스를 로딩, JVM에서 사용하는 클래스 로더의 대부분은 URLClassLoader를 확장하여 구현한다. 실행시 클래스 패스에 등록되어 있지 않은 클래스들을 URL로 지정해 로딩할 수 있다.

728x90
반응형

'Work > Java' 카테고리의 다른 글

Java 12  (0) 2017.02.14
Java 11  (1) 2017.02.13
Java 09  (0) 2017.02.05
Java 08  (0) 2017.02.04
Java 07  (0) 2017.02.03