EugeneChung / study

0 stars 0 forks source link

Java class loader 알아보기 #1

Open EugeneChung opened 4 years ago

EugeneChung commented 4 years ago

https://www.baeldung.com/java-classloaders

JVM Default Class Loaders

clhierarchy

User-Defined Class Loaders

On-demand Loading & Delegation

export HADOOP_CLASSPATH=hadoop-xxxx.jar;.....;hive-....jar;... java -classpath hadoop-common.jar;..... org.apache.hadoop.util.RunJar org.apache.hive.service.server.HiveServer2

https://github.com/c9n/hadoop/blob/a315107901aebc8d0c2b9f530d191673d27922a2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/RunJar.java#L135-L225

  1. JVM이 main class인 org.apache.hadoop.util.RunJar 로딩 : RunJar 뒤의 값들은 main 함수로 넘어가는 arguments
  2. main 함수에서 HADOOP_CLASSPATH 경로 구성 후 System class loader 하위의 새로운 class loader 생성 : 설명 편의상 Hadoop class loader라고 명명.
  3. Hadoop class loader에서 HiveServer2 클래스 로딩 후 HiveServer2의 main 함수를 reflection으로 호출

More on On-demand Loading

More on Delegation

More Class Loader Hierarchy Examples

ClassLoader.loadClass Flow

cache https://blog.hargrave.io/2007/09/classforname-caches-defined-class-in.html?m=1

IBM J9

EugeneChung commented 4 years ago