'클래스 로더' 강의에서 클래스 로딩을 설명할 때 잘못된 것 같아 질문드립니다.
1258
投稿した質問数 3
클래스로딩을 진행할 때 먼저 자식 클래스로더가 찾아보고 찾지 못할 경우 부모 클래스로더에게 위임하는 것으로 '자바 성능 최적화' 라는 책에서 배웠습니다.
하지만 강의에서 08분02초부터 클래스로딩 개념을 설명해주실 때 제일 먼저 부모 클래스로더에게 위임한다고 설명해주시는데 이 개념이 잘못된 개념인 것 같아 조심스럽게 질문남깁니다.
chatGPT에게 물어봤을 때도 동일하게 자식 클래스로더가 먼저 찾아보고 부모에게 위임한다고 답변을 줍니다.
回答 2
6
"찾아본다"와 "로딩한다"를 구분해야 할 것 같은데요. "찾아본다"는 것은 이미 어떤 클래스가 메모리로 로딩이 되었는지 찾아본다는 것인데, 그 일은 Application 클래스로더가 먼저 하는거죠. 대신에, 그 클래스가 없어서 로딩을 해야되면, 그때는 부모한테 요청해서 로딩하는게 맞습니다. (그럼 또 마찬가지로 그 부모는 자기가 이미 로딩했나 "찾아본" 다음에 부모한테 로딩을 요청하는거죠. 그러다가 부모가 로딩을 못하면, 자신이 로딩을 하는게 자바의 기본적인 delegation model입니다.
그러니까 "클래스로더가 먼저 찾아보고 부모에게 위임한다"라는 김창환님 말씀이 맞긴한데, 제가 생각한 delegation model의 핵심은... "먼저 찾아본다"에 있는게 아니라 "부모에게 위임한다(그리고 부모가 읽지 못하면 자신이 읽는다)"에 있다고 생각해서 그렇게 설명드렸습니다. 아마 제가 실수한 부분이라면 "(이미 읽은 클래스인지) 먼저 찾아본다"를 언급하지 않았다는 거겠네요. 제 생각엔 너무 당연한 과정이었는데 그 부분을 빠트려서 혼란스러웠을 수도 있겠네요.
제가 참고한건 ClassLoader API 문서입니다.
https://docs.oracle.com/javase/8/docs/api/java/lang/ClassLoader.html
The ClassLoader class uses a delegation model to search for classes and resources. Each instance of ClassLoader has an associated parent class loader. When requested to find a class or resource, a ClassLoader instance will delegate the search for the class or resource to its parent class loader before attempting to find the class or resource itself. The virtual machine's built-in class loader, called the "bootstrap class loader", does not itself have a parent but may serve as the parent of a ClassLoader instance.
감사합니다.
0
저도 여기서 Application -> Extension -> Bootstrap 순서 같은데요. 영어가 제대로 번역한진 모르겠지만.. 찾아보니깐 이 순서인거 같아요 , 자식에서 부모가 맞는거 같은데.. 저도 답변이 궁금합니다.
클래스 로더가 메소드 영역에 저장하는 것은 바이트코드인가요?
1
83
1
실제 개발 단계에서 이 같은 지식들을 적용할 기회가 있을까요?
0
102
1
코틀린 컴파일에 대해서
0
218
1
RuntimeException
0
340
1
Annotation processor에서 element type을 제한했는데도 다른 타입으로 컴파일이 됩니다...이상하게도..
0
399
1
gradle 사용하시는 분 도움
4
763
1
CGLib를 따라 해보면서 문제점이 있으며, 해결법입니다. JDK17입니다.
6
865
0
Spring Data JPA 동적 프록시를 사용 질문
0
419
1
어노테이션 프로세서 활용 예와 관련해 질문 있습니다.
0
503
1
"자바 언어가 플랫폼에 독립적이다" 라는 것에 대해 옳게 이해했는지 궁금합니다!
1
1133
1
metaspace 질문드립니다.
2
394
0
소스컴파일시점에 MagicMojaProcessor가 사용되면 안되는이유
0
424
0
다이나믹 프록시에서 리플렉션이 어떻게 사용되는거죠?
0
468
1
다이나믹 프록시의 단점
0
350
0
new 와 constructor.newInstance();의 차이
0
663
0
두번 실행해야하는 이유
0
472
0
제가 설명한게 맞는지 봐주실 수 있나요?(jvm설명)
0
445
0
JIT 컴파일러와 인터프리터
1
1011
1
Method.invoke()
0
426
1
site 폴더내에 jacoco 폴더가 생기지 않습니다.
0
987
1
메모리 영역의 구조 질문
0
449
1
GC 설명부분 질문드립니다.
0
489
1
jit 와 인터프리터 질문
1
394
1
JVM 메모리 구조에 대해 공부하다가 질문 드립니다.
0
515
1

