首页 > 编程知识 正文

jvm调优面试题,java九大内置对象

时间:2023-05-03 05:44:51 阅读:15542 作者:2746

Java父母的代理模式是什么? 请记住:对于任意一个类,都需要由加载他的类加载器和这个类本身共同确认其在Java虚拟机中的唯一性。

也就是说,JVM中两个类是否“相等”必须首先由同一类加载器加载。 否则,只要类加载器不同,两个类就不一定相等,即使这两个类来自同一个类文件并即时加载相同的虚拟即时加载。

从Java虚拟机的角度来说只存在两种不同的类加载器。 一个是启动类加载器(在HotSpot虚拟机中),该类加载器是虚拟机本身的一部分。 另一个是具有独立于虚拟机的Java语言实现,并且全部是从java.lang.ClassLoader继承的所有其他类加载程序。

从开发者的角度,类加载器可以细分为:

启动(Bootstrap (类加载器)负责将Java_Home/lib下的类库加载到rt.jar等内存中。 由于引导类加载器包含虚拟机的本地实现详细信息,因此开发人员无法直接从引用中操作,因为无法直接获取对引导类加载器的引用。 标准扩展类加载器)通过Sun的ext类加载器(sun.misc.launcher $ ext类加载器)实现。 将位于由Java_Home /lib/ext或java.ext.dir系统变量指定的位置的类库加载到内存中。 开发人员可以直接使用标准的扩展类加载器。 APP应用程序(APP )类加载器)由Sun的app类加载器(sun.misc.launcher $ app类加载器)实现。 将“系统类别路径”(CLASSPATH )指定的类库加载到内存中。 开发人员可以直接使用系统类加载器。 此类加载器通常称为系统)加载器,因为它是ClassLoader的getSystemClassLoader ()方法的返回值。 此外,类加载器是自定义的,其层次关系被称为类加载器父母的代理模型。 在此模型中,除顶级启动类加载器外,其馀的类加载器必须有自己的父类加载器。 这种父子关系通常通过“合并”(Composition )关系实现,而不是“继承”(Inheritance )。

那么双亲委派机制的过程是怎么样的呢?

父母委托机制进程:一个特定类加载器在收到类加载请求时,首先将加载任务委托给父类加载器,然后依次递归,如果父类加载器能够完成类加载任务,则返回正常; 只有在父类加载器无法完成此加载任务时,才自行加载。

那么为什么要这么样做?有什么好处呢?

父母委托模型的优点是,Java类与类加载器具有优先级层次关系。 例如,驻留在rt.jar中的类java.lang.Object最终将委托给位于模型顶部的Bootstrap ClassLoader加载,而不管哪个类加载器加载此类相反,如果父母在不委托模型的情况下由每个类加载器自行加载,则如果用户创建同名的java.lang.Object类并将其放入ClassPath中,则会在系统中生成多个不同的Object类,导致程序混乱因此,如果开发人员尝试创建与rt.jar类库同名的Java类,则可以成功编译,但不会加载和执行。

java.lang.ClassLoader的loadClass (方法首先检查是否已加载,如果未加载,则调用父类加载器的loadClass )方法;如果父加载器为空,则为默认如果父代加载失败,则抛出ClassNotFoundException异常,然后调用自己的findClass ()方法进行加载。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。