首页 > 试题广场 >

下面有关java类加载器,说法正确的是?

[不定项选择题]
下面有关java类加载器,说法正确的是?
  • 引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的
  • 扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。
  • 系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类
  • tomcat为每个App创建一个Loader,里面保存着此WebApp的ClassLoader。需要加载WebApp下的类时,就取出ClassLoader来使用
ABC毋庸置疑,关键是D,我还在想tomcat没那么大手笔吧,每个应用都整一个,看来我还是太天真
发表于 2019-07-23 19:42:37 回复(0)
更多回答
推荐

jvm classLoader architecture :

a、Bootstrap ClassLoader/启动类加载器
主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作.

B、Extension ClassLoader/扩展类加载器
主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作

C、System ClassLoader/系统类加载器
主要负责java -classpath/-Djava.class.path所指的目录下的类与jar包装入工作.

B、 User Custom ClassLoader/用户自定义类加载器(java.lang.ClassLoader的子类)
在程序运行期间, 通过java.lang.ClassLoader的子类动态加载class文件, 体现java动态实时类装入特性.

编辑于 2015-02-02 14:58:39 回复(8)
http://www.blogjava.net/zhuxing/archive/2008/08/08/220841.html 详细说明
发表于 2015-08-13 21:19:31 回复(0)

Java中的类加载器

Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由Java 应用开发人员编写的。系统提供的类加载器主要有下面三个:


引导类加载器(bootstrap class loader):

它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自 java.lang.ClassLoader。主要负责jdk_home/lib目录下的核心api 或 -Xbootclasspath 选项指定的jar包装入工作(其中的jdk_home是指配置jdk环境变量是java_home的配置路径,一般是jdk/jre所在目录)。

扩展类加载器(extensions class loader):

它用来加载 Java 的扩展库。Java虚拟机的实现会提供一个扩展库目录,扩展类加载器在此目录里面查找并加载 Java 类,主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作。

系统类加载器(system class loader):

它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过 ClassLoader.getSystemClassLoader()来获取它。主要负责CLASSPATH/-Djava.class.path所指的目录下的类与jar包装入工作.


除了系统提供的类加载器以外,开发人员可以通过继承java.lang.ClassLoader类的方式实现自己的类加载器,从而进行动态加载class文件,以满足一些特殊的需求,这体现java动态实时类装入特性。

除了引导类加载器之外,所有的类加载器都有一个父类加载器,通过getParent()方法可以得到。对于系统提供的类加载器来说,系统类加载器的父类加载器是扩展类加载器,而扩展类加载器的父类加载器是引导类加载器;对于开发人员编写的类加载器来说,其父类加载器是加载此类加载器 Java 类的类加载器。因为类加载器 Java 类如同其它的 Java 类一样,也是要由类加载器来加载的。一般来说,开发人员编写的类加载器的父类加载器是系统类加载器。类加载器通过这种方式组织起来,形成树状结构。树的根节点就是引导类加载器。下图中给出了一个典型的类加载器树状组织结构示意图,其中的箭头指向的是父类加载器。

编辑于 2017-11-11 17:03:50 回复(9)

编辑于 2019-10-21 21:33:28 回复(4)
bootstrap classloader -引导(也称为原始)类加载器,它负责加载Java的核心类。 extension classloader -扩展类加载器,它负责加载JRE的扩展目录(JAVA_HOME/jre/lib/ext或者由java.ext.dirs系统属性指定的)中JAR的类包。 system classloader -系统(也称为应用)类加载器,它负责在JVM被启动时,加载来自在命令java中的-classpath或者java.class.path系统属性
或者 CLASSPATH*作系统属性所指定的JAR类包和类路径。

发表于 2015-07-22 21:20:50 回复(2)
这种题听都没听过怎么做?根据字面我只敢选BD。笔试是不是可以偷偷地拿手机啊
发表于 2015-08-19 11:45:51 回复(26)
用原生代码实现的这句话听着别扭,到底什么意思?
启动类加载器 用来加载java的核心库, 此类加载器并不继承于java.lang.ClassLoader,不能被java程序直接调用,代码是使用C++编写的.是虚拟机自身的一部分
发表于 2017-04-17 21:36:46 回复(3)
  • HotSpot的Bootstrap ClassLoader由C++语言实现
  • MRP、Maxine这些虚拟机整个都是由Java实现所以Bootstrap ClassLoader由Java语言实现(原生代码)
    图片说明
发表于 2021-07-13 00:49:59 回复(1)
A.Bootstrap ClassLoader/启动类加载器,由C++语言编写并嵌套在JVM内部。不是ClassLoader子类
主要负责jdk_home/lib目录下的核心 api 或者由 -Xbootclasspath 选项指定的jar包装入工作.
B、Extension ClassLoader/扩展类加载器,派生于ClassLoader,由Java语言编写。
主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作
C、System ClassLoader/系统类加载器.(也叫做应用类加载器)是由  Sun  AppClassLoader 实现的。它负责将系统类路径 java -classpath或-Djava.class.path变量所指的目录下 的类库加载到内存中。
D、 APP ClassLoader/系统类加载器,也称为应用程序类加载器,负责加载应用程序classpath目录下的所有jar和class文件。 派生于ClassLoader,由Java语言编写。
有些人说CD其实一样东西,我有点不懂,有没有明白的大神给点建议?

发表于 2017-03-29 10:39:27 回复(1)
在tomcat中可能出现不同的应用引用同一个项目的不同版本。 如果使用appclassloader,会造成引用加载错误。 所以每个应用有自己的类加载器。
发表于 2016-03-14 20:10:38 回复(0)
A.引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的
B.扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。
C.系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类
D.tomcat为每个App创建一个Loader,里面保存着此WebApp的ClassLoader。需要加载WebApp下的类时,就取出ClassLoader来使用
发表于 2015-01-06 15:35:28 回复(2)
D选项tomcat功能指责
发表于 2023-04-29 23:05:44 回复(0)
ABCD√
发表于 2021-12-28 08:53:17 回复(0)
D选项不太确定,涨知识了
发表于 2021-09-15 12:55:13 回复(0)
tomcat有多重情况吧,如果在 common下、share下等部署,是会实现不同应用之间、应用和 tomcat直接的类共享的。那么其对应的类加载器应该是同一个。
发表于 2021-07-29 07:41:29 回复(0)
关于A:引导类加载器是 c++ 写的吧
发表于 2021-04-27 09:11:37 回复(0)
bootstrap classloader -引导(也称为原始)类加载器,它负责加载Java的核心类。 extension classloader -扩展类加载器,它负责加载JRE的扩展目录(JAVA_HOME/jre/lib/ext或者由java.ext.dirs系统属性指定的)中JAR的类包。 system classloader -系统(也称为应用)类加载器,它负责在JVM被启动时,加载来自在命令java中的-classpath或者java.class.path系统属性
或者 CLASSPATH*作系统属性所指定的JAR类包和类路径。
发表于 2020-09-19 15:28:59 回复(0)
tomcat是有打破双亲委派机制的,不然多个war包不能存在不同版本的相同jar包
发表于 2020-06-15 23:43:01 回复(0)
说清楚点好吧,什么叫用原生代码实现的,原生Java代码吗,原生C代码吗,原生汇编代码吗
发表于 2020-04-16 11:09:06 回复(0)
不是还有APP ClassLoader吗,怎么和system classloader的定义是一样的啊

发表于 2019-07-30 10:55:05 回复(1)