← 질문 목록
#66깊이 0
이름이 같은 클래스가 다른 타입이 되는 조건은?
바이너리 이름이 같아도 정의한 클래스 로더가 다르면 JVM은 다른 타입으로 본다. 런타임 타입은 이름과 정의 로더의 조합이다.
| 기준 | 같은 타입 | 다른 타입 |
|---|---|---|
| 바이너리 이름 | 같다 | 같을 수 있다 |
| 정의 로더 | 같다 | 다르다 |
로딩 뒤 검증과 준비를 한다. 심벌 참조의 해결은 필요할 때 늦출 수 있다. 처음 적극 사용하면 정적 초기화가 실행된다.
부모 우선 위임은 이미 로드된 핵심 클래스의 중복 정의를 막는다. 플러그인과 서버는 격리를 위해 이 순서를 일부러 뒤집기도 한다.
서로 다른 로더가 만든 객체는 이름이 같아도 캐스팅할 수 없다. 로더가 실행 중인 스레드나 외부 정적 참조에 붙잡히면 클래스도 언로드되지 않는다.