ClassLoader는 JVM이 ClassLoader가 Java Runtime Environment의 일부라는 사실을 인식하지 못하도록 런타임 중에 Java 클래스를 동적으로 로드하는 개체입니다. JVM 생활이 더 쉬워집니다. JVM은 애플리케이션에서 필요할 때 클래스를 메모리에 로드하며 모든 클래스를 한 번에 로드하지 않습니다. 그러면 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의 기능이 무엇인지 살펴보겠습니다.
클래스 로더 작동 방식을 보여주는 예:
코드:
public class A() { public void addOne() { B b = new B(); b.addTwo(); } }
위 시나리오에서 ClassLoader가 클래스를 로드하는 방법:
이 튜토리얼에서는 다양한 유형의 클래스 로더와 해당 내장 기능, 그리고 그것이 사용되는 이유에 대해 이야기하겠습니다.
확장 ClassLoader는 Bootstrap의 하위 항목입니다. JVM으로 들어오는 모든 Java 클래스의 확장을 로드하는 데 사용됩니다.
모든 수업에는 자신이 만든 모든 수업에 대한 링크가 있습니다. 정적 필드를 저장하려면 메모리가 있어야 합니다. classLoader가 단일 클래스의 정적 필드를 누출하는 경우 이는 ClassLoader가 누출되고 있음을 의미합니다. 그렇게 하면 모든 클래스와 여러 개체, 그리고 이들이 연결된 모든 개체가 유출됩니다. ClassLoader 누출은 너무 위험할 수 있습니다.
애플리케이션의 런타임에 재배포를 수행하거나 향상된 기능을 추가할 때마다 ClassLoader는 클래스를 로드하고 클래스를 다시 로드하거나 언로드하지 않습니다. 따라서 classLoaders가 단일 클래스를 처음부터 로드할 때 처음부터 다시 생성하거나 다시 로드하기 위해 일부 개체를 갖게 됩니다. 이전 클래스 로더는 개체를 이전 상태에서 새 상태로 보냅니다. 따라서 이 전환 과정에서 누출이 발생할 수 있습니다. 따라서 객체가 누출되면 클래스가 누출되므로 클래스 로더가 됩니다.
There are 3 principles that a java ClassLoader works upon:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!