Java 클래스 로더 및 클래스 리플렉션 사용 예
1. 하나의 명령은 하나의 프로세스에 해당합니다.
자바 프로그램을 시작하면, 즉 메인 메소드를 시작하면 아무리 복잡한 프로세스라도 자바 가상 머신 프로세스가 시작됩니다. 서로 다른 JVM 프로세스는 서로 영향을 미치지 않습니다. 이것이 Java 프로그램에 단 하나의 입구, 즉 가상 머신이 호출하는 메인 메소드만 있다고 말하는 이유입니다. 두 가지 주요 메소드는 두 개의 서로 다른 클래스 로더를 시작하고 실제로 서로 다른 클래스를 작동하는 두 개의 JVM 프로세스에 해당합니다. 따라서 서로 영향을 미치지 않습니다.
2. 수업 로딩.
클래스를 사용할 때 클래스가 메모리에 로드되지 않은 경우 시스템은 로드, 연결, 초기화를 통해 클래스를 초기화합니다.
1. 클래스 로딩: 클래스의 클래스 파일을 JVM으로 읽어 들여 클래스 객체를 생성하는 것을 말합니다.
2. 클래스 연결: 클래스의 바이너리 데이터를 JRE에 병합하는 것을 말하며 다음 세 단계로 나뉩니다.
a) 확인: 로드된 클래스 파일 데이터가 올바른지 확인합니다.
b) 준비: 클래스의 정적 변수에 저장 공간을 할당하고 기본 초기화를 수행합니다.
c), 구문 분석: 클래스의 바이너리 데이터에 있는 기호 참조를 직접 참조로 바꿉니다.
3. 초기화: 클래스의 정적 변수 및 정적 초기화 블록을 초기화합니다.
(참고: 최종 유형 정적 속성의 경우 속성 값을 컴파일 타임에 얻은 경우 속성을 호출해도 클래스가 초기화되지 않습니다. 이는 상수를 사용하는 것과 동일하기 때문입니다.
클래스를 로드만 하고 초기화하지 않는 ClassLoader() 메서드를 사용하세요. )
3.
클래스 로더는 .class 파일을 메모리에 로드하고 해당 java.lang.Class 객체를 생성하는 역할을 합니다. 클래스가 JVM에 로드되면 로드되지 않습니다. 다시.
Java에서 클래스는 정규화된 클래스 이름(예: 패키지 이름 + 클래스 이름)으로 식별됩니다.
JVM에서 클래스는 정규화된 클래스 이름과 클래스 로더로 식별됩니다.
JVM은 실행 시 3개의 ClassLoader, 즉 BootstrapClassLoader(루트 클래스 로더), ExtClassLoader(확장 클래스 로더) 및 AppClassLoader(시스템 클래스 로더)를 생성합니다. UML 구조는 다음과 같습니다.
그중 BootstrapClassLoader는 JRE의 핵심 클래스 라이브러리를 로드하는 역할을 담당합니다. ClassLoader의 하위 클래스는 아닙니다. C++로 작성되었으므로 Java에서는 표시되지 않으며 하위 클래스의 getParent() 메서드를 통해 얻을 때 null을 반환합니다. BootstrapClassLoader는 JRE 대상 아래에 rt.jar 및 charsets.jar과 같은 Java 핵심 클래스 라이브러리를 로드하는 역할을 합니다.
그림에서 볼 수 있듯이 ExtClassLoader와 AppClassLoader는 ClassLoader의 하위 클래스입니다. API에서는 볼 수 없으며 rt.jar 파일에 있습니다. 정규화된 클래스 이름은
sun.misc.Launcher$ExtClassLoader 및 sun.misc.Launcher$AppClassLoader입니다.
그 중 ExtClassLoader는 JRE 확장에서 JAR 패키지를 로드하는 역할을 담당합니다. 디렉토리 ext 및 AppClassLoader 클래스 경로 경로 아래에 클래스 패키지를 로드하는 역할을 담당합니다.
테스트 내용은 다음과 같습니다.
package com.stopTalking.crazy; public class TestClassLoader { public static void main(String[] args) { //获取当前线程的类装载器 ClassLoader loader = Thread.currentThread().getContextClassLoader(); //获取System类的类装载器 ClassLoader loader1 = System.class.getClassLoader(); //获取本类TestClassLoader的类装载器loader2 ClassLoader loader2 = TestClassLoader.class.getClassLoader(); //获取loader2的父类 ClassLoader loader3 = loader2.getParent(); //获取loader2的父类的父类 ClassLoader loader4 = loader3.getParent(); System.out.println(loader); System.out.println(loader1); System.out.println(loader2); System.out.println(loader3); System.out.println(loader4); } }
콘솔 출력:
//当前线程类获取的类加载器是AppClassLoader sun.misc.Launcher$AppClassLoader@6b97fd //System类为根装载器加载,java中访问不到,所以为null null //本类的类加载器当然也是AppClassLoader sun.misc.Launcher$AppClassLoader@6b97fd sun.misc.Launcher$ExtClassLoader@1c78e57 null
더 많은 Java 클래스 로더 및 클래스 리플렉션 사용 예제 관련 기사를 보려면 PHP 중국어 웹사이트를 참고하세요. !

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이 기사는 2025 년에 상위 4 개의 JavaScript 프레임 워크 (React, Angular, Vue, Svelte)를 분석하여 성능, 확장 성 및 향후 전망을 비교합니다. 강력한 공동체와 생태계로 인해 모두 지배적이지만 상대적으로 대중적으로

이 기사는 원격 코드 실행을 허용하는 중요한 결함 인 Snakeyaml의 CVE-2022-1471 취약점을 다룹니다. Snakeyaml 1.33 이상으로 Spring Boot 응용 프로그램을 업그레이드하는 방법에 대해 자세히 설명합니다.

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

Node.js 20은 V8 엔진 개선, 특히 더 빠른 쓰레기 수집 및 I/O를 통해 성능을 크게 향상시킵니다. 새로운 기능에는 더 나은 webAssembly 지원 및 정제 디버깅 도구, 개발자 생산성 및 응용 속도 향상이 포함됩니다.

대규모 분석 데이터 세트를위한 오픈 테이블 형식 인 Iceberg는 데이터 호수 성능 및 확장 성을 향상시킵니다. 내부 메타 데이터 관리를 통한 Parquet/Orc의 한계를 해결하여 효율적인 스키마 진화, 시간 여행, 동시 W를 가능하게합니다.

이 기사는 오이 단계간에 데이터를 공유하는 방법, 시나리오 컨텍스트, 글로벌 변수, 인수 통과 및 데이터 구조를 비교합니다. 간결한 컨텍스트 사용, 설명을 포함하여 유지 관리에 대한 모범 사례를 강조합니다.

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]
