资讯专栏INFORMATION COLUMN

Java面试题:类加载器

sshe / 1340人阅读

摘要:面试题类加载器类加载器源代码文件通过编译成字节码文件后,需要被加载到虚拟机的内存空间中使用,这个过程就是类加载。该类加载器在此目录里面查找并加载类。每一个类加载器都有一个父装载器。引导类加载器处理完成后,把剩下的给扩展类加载器。

面试题:类加载器 1. Java类加载器

Java源代码.java文件通过编译成字节码.class文件后,需要被加载到Java虚拟机的内存空间中使用,这个过程就是类加载。类加载依靠的是Java类加载器

Java类加载器是Java运行时环境的一部分,负责动态加载Java类到Java虚拟机的内存空间中。类通常是按需加载的,即第一次使用该类时才加载。由于有了类加载器,Java运行时系统不需要知道文件的位置与文件系统。

2. JVM的3个默认类加载器

引导(Bootstrap)类加载器。由原生代码C语言编写,不继承java.lang.ClassLoader。负责加载核心Java库,存储在/jre/lib目录中。

扩展(Extensions)类加载器。用来在指明的目录中加载Java的扩展类。Java虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载Java类。该类由sun.misc.Launcher$ExtClassLoader实现。

Apps类加载器(也称系统类加载器)。根据Java应用程序的类路径来加载Java类。一般来说,Java应用程序的类都是由它来完成加载的,可以通过ClassLoader.getSystemClassLoader()来获取它。该类由sun.misc.Launcher$AppClassLoader来实现。

每一个类加载器都有一个父装载器(parent class loader)。

3. 如何保证一个类被加载一次

全盘负责委托机制

解释:当一个ClassLoader加载一个Class的时候,这个Class所依赖的和引用的其他Class通常也是由这个classloader负责载入的。例如加载一个普通的Demo类,Apps类加载器首先拿到这个类的class文件,先让parent(父)类加载器也就是扩展(Extensions)类加载器处理。扩展(Extensions)类加载器拿到class文件后同样先让parent(父)类加载器处理,也就是引导(Bootstrap)类加载器会先处理属于它应该加载的部分。引导类加载器处理完成后,把剩下的给扩展类加载器。扩展类加载器处理属于它的内容,将剩下的部分交给Apps类加载器,Apps类加载器会加载剩下的全部内容。

每个类加载器只会加载自己负责的部分。

这样每个类只会被加载一次。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74265.html

相关文章

  • 面试加载

    摘要:面试题类加载器类加载器源代码文件通过编译成字节码文件后,需要被加载到虚拟机的内存空间中使用,这个过程就是类加载。该类加载器在此目录里面查找并加载类。引导类加载器处理完成后,把剩下的给扩展类加载器。 面试题:类加载器 1. Java类加载器 Java源代码.java文件通过编译成字节码.class文件后,需要被加载到Java虚拟机的内存空间中使用,这个过程就是类加载。类加载依靠的是Ja...

    v1 评论0 收藏0
  • Java面试:面向对象,加载,JDBC, Spring 基础概念

    摘要:为什么不是面向对象不是面向对象,因为它包含个原始数据类型,例如。自定义类加载器继承的自定义类加载器。可以像下面这样指定参数面试题面向对象,类加载器,基础概念它们的关系如下启动类加载器,实现,没有父类。自定义类加载器,父类加载器为。 1. 为什么说Java是一门平台无关语言? 平台无关实际的含义是一次编写到处运行。Java 能够做到是因为它的字节码(byte code)可以运行在任何操作...

    Euphoria 评论0 收藏0
  • Java面试:面向对象,加载,JDBC, Spring 基础概念

    摘要:为什么不是面向对象不是面向对象,因为它包含个原始数据类型,例如。自定义类加载器继承的自定义类加载器。可以像下面这样指定参数面试题面向对象,类加载器,基础概念它们的关系如下启动类加载器,实现,没有父类。自定义类加载器,父类加载器为。 1. 为什么说Java是一门平台无关语言? 平台无关实际的含义是一次编写到处运行。Java 能够做到是因为它的字节码(byte code)可以运行在任何操作...

    walterrwu 评论0 收藏0
  • Java面试:面向对象,加载,JDBC, Spring 基础概念

    摘要:为什么不是面向对象不是面向对象,因为它包含个原始数据类型,例如。自定义类加载器继承的自定义类加载器。可以像下面这样指定参数面试题面向对象,类加载器,基础概念它们的关系如下启动类加载器,实现,没有父类。自定义类加载器,父类加载器为。 1. 为什么说Java是一门平台无关语言? 平台无关实际的含义是一次编写到处运行。Java 能够做到是因为它的字节码(byte code)可以运行在任何操作...

    longmon 评论0 收藏0
  • Java面试:面向对象,加载,JDBC, Spring 基础概念

    摘要:为什么不是面向对象不是面向对象,因为它包含个原始数据类型,例如。自定义类加载器继承的自定义类加载器。可以像下面这样指定参数面试题面向对象,类加载器,基础概念它们的关系如下启动类加载器,实现,没有父类。自定义类加载器,父类加载器为。 1. 为什么说Java是一门平台无关语言? 平台无关实际的含义是一次编写到处运行。Java 能够做到是因为它的字节码(byte code)可以运行在任何操作...

    Youngs 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<