下面有关java类加载器牛客网_下面有关java classloader说法错误的是?

0

有的书上介绍的JVM中3个默认ClassLoader是:BootStrap ClassLoader,Extension

ClassLoader,System ClassLoader。当然有时我们也可以设置UseLibrary ClassLoader。这个题是不是有问题呢?

发表于 2015-08-24 16:46:27

回复(0)

更多回答

142

推荐

C

JVM在判定两个c

查看全部

编辑于 2015-01-10 21:03:23

回复(13)

136

一个jvm中默认的classloader有Bootstrap ClassLoader、Extension

ClassLoader、App ClassLoader,分别各司其职:

Bootstrap

ClassLoader   负责加载java基础类,主要是

%JRE_HOME/lib/ 目录下的rt.jar、resources.jar、charsets.jar和class等

Extension ClassLoader

负责加载java扩展类,主要是 %JRE_HOME/lib/ext 目录下的jar和class

App ClassLoader       负责加载当前java应用的classpath中的所有类。

classloader 加载类用的是全盘负责委托机制。

所谓全盘负责,即是当一个classloader加载一个Class的时候,这个Class所依赖的和引用的所有 Class也由这个classloader负责载入,除非是显式的使用另外一个classloader载入。

所以,当我们自定义的classlo

ader加载成功了

com.company.MyClass以后,MyClass里所有依赖的class都由这个classLoader来加载完成。

发表于 2015-09-20 22:38:32

回复(4)

114

比较两个类是否相等,只有这两个类是由同一个类加载器加载才有意义。否则,即使这两个类是来源于同一个Class文件,只要加载它们的类加载器不同,那么这两个类必定不相等。

补充:

1.

什么是类加载器?

把类加载的过程放到Java虚拟机外部去实现,让应用程序决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。

2.

有哪些类加载器,分别加载哪些类

类加载器按照层次,从顶层到底层,分为以下三种:(1)启动类加载器:它用来加载Java的核心库,比如String、System这些类(2)扩展类加载器:它用来加载Java的扩展库。

(3)

应用程序类加载器 :负责加载用户类路径上所指定的类库,一般来说,Java应用的类都是由它来完成加载的。

3.

双亲委派模型

我们应用程序都是由以上三种类加载器互相配合进行加载的,还可以加入自己定义的类加载器。称为

类加载器的双亲委派模型

,这里类加载器之间的父子关系一般不会以继承的关系来实现,而是都使用

组合关系

来复用父加载器的。

4.

双亲委托模型的工作原理

是当一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法加载这个加载请求的时候,子加载器才会尝试自己去加载。

5.

使用双亲委派模型好处?(原因)

第一:可以避免重复加载,当父亲已经加载了该类的时候,子类不需要再次加载。

第二:考虑到安全因素,如果不使用这种委托模式,那我们就可以随时使用自定义的String来动态替代java核心api中定义类型,这样会存在非常大的安全隐患,而双亲委托的方式,就可以避免这种情况,因为String已经在启动时被加载,所以用户自定义类是无法加载一个自定义的类装载器。

编辑于 2016-11-07 22:07:51

回复(10)

21

ClassLoader使用的是

双亲委托模型

来搜索类的,每个ClassLoader实例都有一个父类加载器的引用(不是继承的关系,是一个包含的关系),虚拟机内置的类加载器(Bootstrap

ClassLoader)本身没有父类加载器,但可以用作其它ClassLoader实例的的父类加载器。当一个ClassLoader实例需要加载某个类时,它会试图亲自搜索某个类之前,先把这个任务委托给它的父类加载器,这个过程是由上至下依次检查的,首先由最顶层的类加载器Bootstrap

ClassLoader试图加载,如果没加载到,则把任务转交给Extension

ClassLoader试图加载,如果也没加载到,则转交给App ClassLoader 进行加载,如果它也没有加载得到的话,则返回给委托的发起者,由它到指定的文件系统或网络等URL中加载该类。如果它们都没有加载到这个类时,则抛出ClassNotFoundException异常。否则将这个找到的类生成一个类的定义,并将它加载到内存当中,最后返回这个类在内存中的Class实例对象。

发表于 2016-03-27 14:34:57

回复(4)

5

在JVM中,一个类用其全限定类名和其类加载器作为唯一标识,

如果在pg包下,有一个Person类,classloade k1 、

classloade k2分别加载Person类

Person类在JVM中对应的Class对象为

(

Person,pg,k1

)与

(

Person,pg,k2

)

是不同的

发表于 2016-03-08 11:24:09

回复(0)

3

classloader的作用是用来加载 Class 的:它负责将 Class 的字节码形式转换成内存形式的 Class 对象。

字节码可以来自于磁盘文件 *.class,也可以是 jar 包里的 *.class,也可以来自远程服务器提供的字节流,字节码的本质就是一个字节数组 []byte,它有特定的复杂的内部格式。

JVM 运行实例中会存在多个 ClassLoader,不同的 ClassLoader 会从不同的地方加载字节码文件。

它可以从不同的文件目录加载,也可以从不同的 jar 文件中加载,也可以从网络上不同的静态文件服务器来下载字节码再加载。

jvm里ClassLoader的层次结构

f1e77f747218b67444ba638a039b16ce.png

发表于 2020-05-03 10:06:37

回复(0)

3

选C

e7debd604f7b232736afa3983968e1c3.png

A、Java中存在三种系统加载器:

1. Bootstrap ClassLoader(启动类加载器),这个类加载器负责把存放在\lib目录中,或者被-Xbootclasspath参数指定得路径中得,并且被JVM识别得类库加载进入JVM。注意一下,这个加载器不能被Java程序直接引用。这个加载器是由C++写得。

2. Extension ClassLoder(扩展类加载器),这个加载器负责加载\lib\ext目录中的,或者被java.ext.dirs系统变量所指定的路径中的所有类库。这个类加载器可以直接使用。

3. Application ClassLoader(应用程序加载器),用来加载classpath中所指定的类库。这个是默认的类记载器。

B、类加载器中除了顶层的启动类加载器,其余的类加载器都是必须有自己的父类加载器。但是这种子父关系一般不会以继承的关系实现,而是使用了组合的关系来复用父加载器的代码。

类加载器都正常情况下都是以双亲委派模型工作的,工作原理如下,如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送给顶层的启动类加载器,只有当父加载器反馈自己无法完成时,子加载器才会尝试自己去加载。

C、一个类在JVM中的唯一性是由类本身和类加载器一起决定的。每一个类加载器都有一个独立的类名称空间。

D、类加载器就是动态的把.class文件加载进JVM,没毛病。

发表于 2018-07-04 11:47:35

回复(0)

1

C,只有同一个类加载器加载的相同类名的才是一个class

发表于 2015-09-15 16:30:33

回复(0)

0

jvm判断两个class是否相同,类名相同,同一类加载器实例加载

发表于 2021-02-20 16:18:42

回复(0)

0

这个不熟

发表于 2020-09-17 22:39:26

回复(0)

0

不会

发表于 2020-03-10 21:37:30

回复(0)

0

JVM中默认的ClassLoader是Bootstrap ClassLoader,Extension ClassLoader,App ClassLoader

>Bootstrap ClassLoader 负责加载java基础类 主要是%JRE_HOME/lib/目录下的rt.jar resources.jar,charsets.jar和class等

>Exrension ClassLoader 负责加载java扩展类 %JRE_HOME/lib/text目录下的jar和class

>App ClassLoader 负责加载java应用的classpath中的所有类

1.什么是类加载器?

把类加载过程放到 java虚拟机外部去实现,让应用程序决定如何获取需要的类,称为类加载器

2.类加载器分为 启动类加载器 扩展类加载器 应用类加载器

3.双亲委派机制:三种类加载器相互配合,还可以添加自定义类加载器,进行类加载称为双亲委派机制;

4.工作原理,委派父类加载器加载,一直委派到根类,如果无法加载,子类就会自动调用类加载器加载

5.双亲委派机制 避免了重复加载 考虑到了安全因素

发表于 2018-09-20 11:01:32

回复(0)

0

类名和类加载器都要比较

发表于 2017-10-26 20:43:38

回复(0)

0

一个jvm中默认的classloader有Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader,分别各司其职: Bootstrap ClassLoader     负责加载java基础类,主要是 %JRE_HOME/lib/ 目录下的rt.jar、resources.jar、charsets.jar和class等 Extension ClassLoader      负责加载java扩展类,主要是 %JRE_HOME/lib/ext 目录下的jar和class App ClassLoader           负责加载当前java应用的classpath中的所有类。 jvm判断两个类是否 相等,不止类名相等,类的加载器也必须相等。 classloader 加载类用的是全盘负责委托机制。 所谓全盘负责,即是当一个classloader加载一个Class的时候,这个Class所依赖的和引用的所有 Class也由这个classloader负责载入,除非是显式的使用另外一个classloader载入。 所以,当我们自定义的classlo ader加载成功了 com.company.MyClass以后,MyClass里所有依赖的class都由这个classLoader来加载完成。 比较两个类是否相等,只有这两个类是由同一个类加载器加载才有意义。否则,即使这两个类是来源于同一个Class文件,只要加载它们的类加载器不同,那么这两个类必定不相等。 补充: 1. 什么是类加载器? 把类加载的过程放到Java虚拟机外部去实现,让应用程序决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。

编辑于 2017-10-14 10:22:04

回复(0)

0

JVM在判定两个class是否相同时,不仅要判断两个类名是否相同,而且要判断是否由同一个类加载器实例加载的。

发表于 2017-08-07 09:55:06

回复(0)

0

比较两个类是否相等,只有这两个类是由同一个类加载器加载才有意义。否则,即使这两个类是来源于同一个Class文件,只要加载它们的类加载器不同,那么这两个类必定不相等。

补充: 1. 什么是类加载器?

把类加载的过程放到Java虚拟机外部去实现,让应用程序决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。   2.

有哪些类加载器,分别加载哪些类 类加载器按照层次,从顶层到底层,分为以下三种: (1)启动类加载器 : 它用来加载 Java

的核心库,比如String、System这些类 (2)扩展类加载器 : 它用来加载 Java 的扩展库。 (3) 应用程序类加载器 :

负责加载用户类路径上所指定的类库,一般来说,Java 应用的类都是由它来完成加载的。 3. 双亲委派模型

我们应用程序都是由以上三种类加载器互相配合进行加载的,还可以加入自己定义的类加载器。称为 类加载器的双亲委派模型

,这里类加载器之间的父子关系一般不会以继承的关系来实现,而是都使用 组合关系 来复用父加载器的。 4. 双亲委托模型的工作原理

是当一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法加载这个加载请求的时候,子加载器才会尝试自己去加载。

5. 使用双亲委派模型好处?(原因) 第一:可以避免重复加载,当父亲已经加载了该类的时候,子类不需要再次加载。

第二:考虑到安全因素,如果不使用这种委托模式,那我们就可以随时使用自定义的String来动态替代java核心api中定义类型,这样会存在非常大的安全隐患,而双亲委托的方式,就可以避免这种情况,因为String已经在启动时被加载,所以用户自定义类是无法加载一个自定义的类装载器。

发表于 2016-12-12 09:37:21

回复(0)

0

全盘委托,类加载器,类名相同,类加载器相同

发表于 2016-10-22 08:09:54

回复(0)

0

JVM在判定两个class是否相同时,不仅要判断两个类名是否相同,而且要判断是否由同一个类加载器实例加载的。

发表于 2016-04-13 21:04:05

回复(0)

0

答案:C

由于类加载器的双亲委托机制,不同类加载器加载的类必定不是同一个类

发表于 2015-01-10 11:46:28

回复(0)

0

C.JVM在判定两个class是否相同时,只用判断类名相同即可,和类加载器无关

发表于 2015-01-06 18:15:11

回复(0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值