☕java/ 더_자바_코드를_조작하는_다양한_방법클래스 로더 시스템약 1분GitHub에서 보기클래스 로더 시스템 AppClassLoader PlatformClassLoader BootstrapClassLoader => 자바 코드에서는 참조할 수 없음 => JVM 마다 구현이 다름 클래스 로더는 계층형 이다 클래스 읽기 부모가 읽으면 아래로 순차적으로 읽는다 못 읽으면 ClassNotFoundException 로딩 클래스 로더가 .class 파일을 읽고 적절한 바이너리 데이터를 만들고 메소드 영역에 저장한다 저장되는 정보는 다음과 같다 Fully Quailified Class Name (패키지 정보까지 포함한 클래스 이름) 클래스, 인터페이스, Enum(이늄) 로딩이 끝나면 해당 클래스 타입의 객체를 힙 영역에 저장 예) Application.class 링크 Verify, Prepare, Reolve(optional) 검증 : class 파일 형식이 유효한지 체크 Preparation : 클래스 변수(static)와 기본값에 필요한 메모리를 준비 Resolve : 심볼릭 메모리 레퍼런스를 메소드 영역에 있는 실제 레퍼런스로 교체 초기화 static한 변수들을 할당한다 제일 중요한 것 바이트 코드 => 바이트 코드가 있어야 돌아간다..
클래스 로더 시스템 AppClassLoader PlatformClassLoader BootstrapClassLoader => 자바 코드에서는 참조할 수 없음 => JVM 마다 구현이 다름 클래스 로더는 계층형 이다 클래스 읽기 부모가 읽으면 아래로 순차적으로 읽는다 못 읽으면 ClassNotFoundException 로딩 클래스 로더가 .class 파일을 읽고 적절한 바이너리 데이터를 만들고 메소드 영역에 저장한다 저장되는 정보는 다음과 같다 Fully Quailified Class Name (패키지 정보까지 포함한 클래스 이름) 클래스, 인터페이스, Enum(이늄) 로딩이 끝나면 해당 클래스 타입의 객체를 힙 영역에 저장 예) Application.class 링크 Verify, Prepare, Reolve(optional) 검증 : class 파일 형식이 유효한지 체크 Preparation : 클래스 변수(static)와 기본값에 필요한 메모리를 준비 Resolve : 심볼릭 메모리 레퍼런스를 메소드 영역에 있는 실제 레퍼런스로 교체 초기화 static한 변수들을 할당한다 제일 중요한 것 바이트 코드 => 바이트 코드가 있어야 돌아간다..