ClassLoader는 JVM이 ClassLoader가 Java Runtime Environment의 일부라는 사실을 인식하지 못하도록 런타임 중에 Java 클래스를 동적으로 로드하는 개체입니다. JVM 생활이 더 쉬워집니다. JVM은 애플리케이션에서 필요할 때 클래스를 메모리에 로드하며 모든 클래스를 한 번에 로드하지 않습니다. 그러면 ClassLoader가 나타나서 클래스를 메모리에 로드합니다.
무료 소프트웨어 개발 과정 시작
웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등
Java에서 ClassLoader를 구현하는 방법은 무엇입니까?
java.lang.ClassLoader가 Java 라이브러리 코드에서 어떻게 구현되고 그 기능이 무엇인지 살펴보겠습니다.
java.lang.ClassLoader:
public abstract class ClassLoader { public class loadClass(String name); protected class defineClass(byte[] b); public URL getResource(String name); public Enumeration getResources(String name); public ClassLoader getParent() };
Java에서 ClassLoader의 기능이 무엇인지 살펴보겠습니다.
- loadClass(): 이것은 클래스 이름을 문자열로 취하고 클래스의 인스턴스를 다시 반환하는 중요한 메소드이며, 클래스 로더가 사용하는 클래스가 될 것입니다. 이(가) 클래스 경로에서 발견되었으며, 이 클래스 경로에서 객체가 인스턴스화될 수 있도록 이를 제공합니다.
- defineClass(): 이 메서드는 바이트 배열을 인수로 사용하고 해당 바이트 배열에서 클래스를 생성한다는 점을 제외하면 loadClass 메서드와 유사하게 작동합니다. 즉, 클래스 자체를 가져옵니다. 바이트 배열로. 클래스 자체가 바이트 배열로 제공되는 반면, loadClass는 클래스를 로드하려면 해당 클래스를 찾아야 한다는 점에서 loadClass 메서드와 약간 다릅니다.
- getResource() 또는 getResources(): 이 메소드는 문자열 이름과 패키지 이름. 모든 가정을 배제하고 수업이 로드되는 위치와 방법의 정확한 경로를 제공합니다.
- getparent(): classLoader의 계층 구조를 이해하는 핵심 메소드입니다. ClassLoader는 평면 구조가 아니며 상위 및 하위 계층 구조와 구조 수준이 있습니다.
Java에서 ClassLoader는 어떻게 작동하나요?
클래스 로더 작동 방식을 보여주는 예:
코드:
public class A() { public void addOne() { B b = new B(); b.addTwo(); } }
위 시나리오에서 ClassLoader가 클래스를 로드하는 방법:
- 보시다시피 위 코드에서 클래스 A는 addOne() 함수를 호출합니다. 그리고 해당 함수 내에서 클래스 B의 인스턴스가 생성되고 클래스 B의 또 다른 메서드인 addTwo()가 호출됩니다.
- 그래서 classLoader는 클래스 A를 로드하고, 클래스 로더는 클래스 B를 로드합니다. 따라서 호출은 class.getClassLoader().loadClass(“B”); 와 같이 발생합니다.
- 클래스 로더의 이러한 기능으로 인해 클래스의 계층 구조를 갖고 클래스 연결을 디코딩할 수 있습니다.
클래스로더의 종류
이 튜토리얼에서는 다양한 유형의 클래스 로더와 해당 내장 기능, 그리고 그것이 사용되는 이유에 대해 이야기하겠습니다.
1. 부트스트랩 클래스 로더
- Java ClassLoader는 java.lang의 인스턴스이기도 합니다. 클래스인 ClassLoader는 누가 ClassLoader 클래스를 로드할지 상상해 보세요. Bootstrap ClassLoader가 등장하는 시나리오를 살펴보겠습니다.
- $JAVA_HOME/jre/lib 디렉토리에서 모든 rt.jar 및 기타 핵심 라이브러리를 로드합니다.
- 다른 모든 ClassLoader 인스턴스의 상위 역할을 합니다.
- JVM 부분 중 하나이며 Native 코드로 작성되었습니다. 따라서 이 특정 ClassLoader에 대한 구현이 변경될 수 있습니다.
2. 확장 클래스 로더
확장 ClassLoader는 Bootstrap의 하위 항목입니다. JVM으로 들어오는 모든 Java 클래스의 확장을 로드하는 데 사용됩니다.
3. 애플리케이션 클래스로더
- Extension ClassLoader의 하위 항목입니다.
- classpath 환경 변수 –classpath 또는 –cp에서 모든 애플리케이션 수준 클래스를 로드하는 데 사용됩니다.
클래스 로더 누수
모든 수업에는 자신이 만든 모든 수업에 대한 링크가 있습니다. 정적 필드를 저장하려면 메모리가 있어야 합니다. classLoader가 단일 클래스의 정적 필드를 누출하는 경우 이는 ClassLoader가 누출되고 있음을 의미합니다. 그렇게 하면 모든 클래스와 여러 개체, 그리고 이들이 연결된 모든 개체가 유출됩니다. ClassLoader 누출은 너무 위험할 수 있습니다.
애플리케이션의 런타임에 재배포를 수행하거나 향상된 기능을 추가할 때마다 ClassLoader는 클래스를 로드하고 클래스를 다시 로드하거나 언로드하지 않습니다. 따라서 classLoaders가 단일 클래스를 처음부터 로드할 때 처음부터 다시 생성하거나 다시 로드하기 위해 일부 개체를 갖게 됩니다. 이전 클래스 로더는 개체를 이전 상태에서 새 상태로 보냅니다. 따라서 이 전환 과정에서 누출이 발생할 수 있습니다. 따라서 객체가 누출되면 클래스가 누출되므로 클래스 로더가 됩니다.
Principles of Java ClassLoader
There are 3 principles that a java ClassLoader works upon:
- Delegation Model: It delegates class loading requests to parent ClassLoader and loads class only if the parent is not able to find or load the class.
- Visibility Principle: This principle states the visibility scope of loaded classes. Class loaded by its parent is visible to parent class loaders, but the class loaded by its child is not visible to the parent class loader.
- Uniqueness Property: It ensures that there is no repetition of classes in the class loader. If a parent loads a class, then its corresponding child does not load this class.
Example of Custom ClassLoader
This is the custom ClassLoader example named with ClassLoaderJava.java:
Code: ClassLoaderJava.java
import java.lang.reflect.Constructor; import java.lang.reflect.Method; public class ClassLoaderJava extends ClassLoader{ // created to load class and invoke method. public void classLoadingDemo(String classBinString, String methodName) { try { // will create an instance of class loader. ClassLoader classLoaderInstance = this.getClass().getClassLoader(); // creating an instance of a class to store the loaded class. Class loadedClass = classLoaderInstance.loadClass(classBinString); System.out.println("Loaded class name is: " + loadedClass.getName()); // Fetching the constructor of loaded class. Constructor con = loadedClass.getConstructor(); // creating an instance to invoke the method. Object obj = con.newInstance(); // Will store the method fetched from loaded class. Method invokingMethod = loadedClass.getMethod(methodName); System.out.println("Invoked method name is: " + invokingMethod.getName()); invokingMethod.invoke(obj); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
Code: DemoClass.java
public class DemoClass { public void add() { System.out.println("This method is invoked by the classLoader."); } }
Code: LoadingTest.java
public class LoadingTest { public static void main(String[] args) { ClassLoaderJava classLoader = new ClassLoaderJava(); classLoader.classLoadingDemo("DemoClass" , "add"); } }
Output:
위 내용은 Java의 클래스로더의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

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

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

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


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

WebStorm Mac 버전
유용한 JavaScript 개발 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기
