请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

JDK8跟9以后的双亲委派问题

关于类是通过哪个类加载器加载的问题想跟老师确认一下。
问题背景:假设我们程序中有个类是通过AppClassLoad来进行加载的

自下往上:
在JDK9以后,是首先通过查找自己的具名模块中是否有定义,如果有定义就直接在当前的加载器中就加载完成,如果没有,再通过父级类加载器去寻找,直到启动类加载器。

而在JDK8中,因为没有模块化的概念,所以,就算这个类其实是通过当前的类加载器去加载的,但是它也不会直接去加载,而是一级一级的去请求父级类加载器去加载,然后再一级一级的向下反馈,直到AppClassLoad这个类加载器,然后去它的classpath路径下去寻找,然后进行加载。

所以,在JDK9以后,关于类加载的效率,相比8来说,就提高了,我这样理解对吗

正在回答

1回答

JDK8和JDK9之后,装载class的时候,都是现在自己这个ClassLoader里面找,找不到,然后一级一级的去请求父级类加载器去加载,然后再一级一级的向下反馈,大步骤上JDK8和JDK9之后的装载过程是一样的。 只不过JDK9之后,有了模块化,所以它每次要在 每级ClassLoader装载的模块 里面来寻找具体要装载的类,其它没什么大差别。

0 回复 有任何疑惑可以回复我~
  • 提问者 无心铁憨憨 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-06-26 10:18:04
  • 老师,我还是不太懂,如果说加载类时一开始就在自己的classloader里找,那么按理说如果到启动类加载器还找不到时就应该报错了,那为什么还要一级级地向下反馈呢,这不是多此一举么。另外如果首先自己加载的话,那我自己写个java.lang.String类岂不是就优先用AppClassLoader加载了么。我在网上看到大家说加载流程应该是优先向上请求父加载器加载,最后才轮到自己,我有点混乱了。。。希望老师能为我解惑
    回复 有任何疑惑可以回复我~ 2020-09-30 09:57:12
  • 请老师有空的解答一下呗,我也很迷惑,jdk8和jdk9以后都是寻找到具体的装载类了,就直接加载,不用反馈给上一级父级加载类了对吗?
    回复 有任何疑惑可以回复我~ 2021-01-05 16:33:47
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信