java 기초 학습 노트 같은 캐리어
자바 클래스 마운트는 실행할 때 JVM에서 필요한 클래스를 동적으로 마운트하는 것입니다. 자바 클래스 마운트는 세 가지 메커니즘을 바탕으로 합니다. 의뢰, 가시, 단일입니다.
classpath 밑에 있는 것들.class 파일이 메모리에 불러와서 처리되면 바이트 코드가 됩니다. 이 작업은 클래스 마운트가 합니다.
시스템 기본 세 가지 클래스 로더:
public class ClassLoaderTest {
public static void main(String[] args) {
System.out.println(System.class.getClassLoader());
}
}
출력:null시스템을 사용한다면.out.println(System.class.getClassLoader().toString);,그러면 빈 포인터 예외가 발생합니다.
Exception in thread "main" java.lang.NullPointerException
at com.iot.classloader.ClassLoaderTest.main(ClassLoaderTest.java:10)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
System 클래스는 BootStrap 클래스 로드기에 의해 로드됩니다.클래스 캐리어의 위탁 메커니즘
클래스 캐리어의 트리 그래프
클래스 로더
일반 로드 클래스 순서:
API:
Class ClassLoader
템플릿 방법 설계 모델
상위 클래스:
loadClass (클래스 로드 프로세스, 템플릿)
findClass 하위 클래스가 덮어쓰는loadClass 방법으로 호출된 클래스 로딩 논리
defineClass는class 파일을 바이트 코드로 변환합니다
하위 클래스:findClass 덮어쓰기 방법
예:
loadClass 방법의 원본
protected Class<?> loadClass(String name, boolean resolve)
throws ClassNotFoundException
{
synchronized (getClassLoadingLock(name)) {
// First, check if the class has already been loaded
Class<?> c = findLoadedClass(name);
if (c == null) {
long t0 = System.nanoTime();
try {
if (parent != null) {
c = parent.loadClass(name, false);
} else {
c = findBootstrapClassOrNull(name);
}
} catch (ClassNotFoundException e) {
// ClassNotFoundException thrown if class not found
// from the non-null parent class loader
}
if (c == null) {
// If still not found, then invoke findClass in order
// to find the class.
long t1 = System.nanoTime();
c = findClass(name);
// this is the defining class loader; record the stats
sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);
sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);
sun.misc.PerfCounter.getFindClasses().increment();
}
}
if (resolve) {
resolveClass(c);
}
return c;
}
}
API 문서의 예:
class NetworkClassLoader extends ClassLoader {
String host;
int port;
public Class findClass(String name) {
byte[] b = loadClassData(name);
return defineClass(name, b, 0, b.length);
}
private byte[] loadClassData(String name) {
// load the class data from the connection
. . .
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.