精华内容
下载资源
问答
  • 面试官:请你谈谈Java的类加载过程

    万次阅读 多人点赞 2018-02-01 00:08:28
    刚刚走出校门的应届毕业生,如果在去寻求一份Java开发的工作时,你的面试官很有可能一边看着你的简历,一边漫不经心地问你:了解过Java加载过程吗? 这个时候你一定要注意了,虽然这是一个老生常谈的问题,但是...

    刚刚走出校门的应届毕业生,如果在去寻求一份Java开发的工作时,你的面试官很有可能一边看着你的简历,一边漫不经心地问你:了解过Java类的加载过程吗?

    这个时候你一定要注意了,虽然这是一个老生常谈的问题,但是这也是一个非常能够考验你Java功底的问题。

    如果你答好了,这是你应该的;如果你没答好,那么对不起,面试官心中已经给了你不及格。

    今天,小编就Java类加载过程这个问题,抛砖引玉,说一下自己的理解,如果有不对的地方,欢迎大家在评论去指正。

    前言

    一个Java文件从编码完成到最终执行,一般主要包括两个过程

    • 编译

    • 运行

    编译,即把我们写好的java文件,通过javac命令编译成字节码,也就是我们常说的.class文件。

    运行,则是把编译声称的.class文件交给Java虚拟机(JVM)执行。

    而我们所说的类加载过程即是指JVM虚拟机把.class文件中类信息加载进内存,并进行解析生成对应的class对象的过程。

    举个通俗点的例子来说,JVM在执行某段代码时,遇到了class A, 然而此时内存中并没有class A的相关信息,于是JVM就会到相应的class文件中去寻找class A的类信息,并加载进内存中,这就是我们所说的类加载过程。

    由此可见,JVM不是一开始就把所有的类都加载进内存中,而是只有第一次遇到某个需要运行的类时才会加载,且只加载一次。

    类加载

    类加载的过程主要分为三个部分:

    • 加载

    • 链接

    • 初始化

    而链接又可以细分为三个小部分:

    • 验证

    • 准备

    • 解析

    加载

    简单来说,加载指的是把class字节码文件从各个来源通过类加载器装载入内存中。

    这里有两个重点:

    • 字节码来源。一般的加载来源包括从本地路径下编译生成的.class文件,从jar包中的.class文件,从远程网络,以及动态代理实时编译

    • 类加载器。一般包括启动类加载器,扩展类加载器,应用类加载器,以及用户的自定义类加载器。

    注:为什么会有自定义类加载器?

    • 一方面是由于java代码很容易被反编译,如果需要对自己的代码加密的话,可以对编译后的代码进行加密,然后再通过实现自己的自定义类加载器进行解密,最后再加载。

    • 另一方面也有可能从非标准的来源加载代码,比如从网络来源,那就需要自己实现一个类加载器,从指定源进行加载。

    验证

    主要是为了保证加载进来的字节流符合虚拟机规范,不会造成安全错误。

    包括对于文件格式的验证,比如常量中是否有不被支持的常量?文件中是否有不规范的或者附加的其他信息?

    对于元数据的验证,比如该类是否继承了被final修饰的类?类中的字段,方法是否与父类冲突?是否出现了不合理的重载?

    对于字节码的验证,保证程序语义的合理性,比如要保证类型转换的合理性。

    对于符号引用的验证,比如校验符号引用中通过全限定名是否能够找到对应的类?校验符号引用中的访问性(private,public等)是否可被当前类访问?

    准备

    主要是为类变量(注意,不是实例变量)分配内存,并且赋予初值。

    特别需要注意,初值,不是代码中具体写的初始化的值,而是Java虚拟机根据不同变量类型的默认初始值。

    比如8种基本类型的初值,默认为0;引用类型的初值则为null;常量的初值即为代码中设置的值,final static tmp = 456, 那么该阶段tmp的初值就是456

    解析

    将常量池内的符号引用替换为直接引用的过程。

    两个重点:

    • 符号引用。即一个字符串,但是这个字符串给出了一些能够唯一性识别一个方法,一个变量,一个类的相关信息。

    • 直接引用。可以理解为一个内存地址,或者一个偏移量。比如类方法,类变量的直接引用是指向方法区的指针;而实例方法,实例变量的直接引用则是从实例的头指针开始算起到这个实例变量位置的偏移量

    举个例子来说,现在调用方法hello(),这个方法的地址是1234567,那么hello就是符号引用,1234567就是直接引用。

    在解析阶段,虚拟机会把所有的类名,方法名,字段名这些符号引用替换为具体的内存地址或偏移量,也就是直接引用。

    初始化

    这个阶段主要是对类变量初始化,是执行类构造器的过程。

    换句话说,只对static修饰的变量或语句进行初始化。

    如果初始化一个类的时候,其父类尚未初始化,则优先初始化其父类。

    如果同时包含多个静态变量和静态代码块,则按照自上而下的顺序依次执行。

    总结

    类加载过程只是一个类生命周期的一部分,在其前,有编译的过程,只有对源代码编译之后,才能获得能够被虚拟机加载的字节码文件;在其后还有具体的类使用过程,当使用完成之后,还会在方法区垃圾回收的过程中进行卸载。如果想要了解Java类整个生命周期的话,可以自行上网查阅相关资料,这里不再多做赘述。

    在面试过程中类加载过程虽然是一个老生常谈的问题,但是往往从这个问题还可以衍生出很多其他重要的知识点,已经罗列在下文中,如果大家感兴趣的话,可以自行学习,小编也会在之后的文章中,对其中的一些问题进行解答和总结。

    相关扩展知识点:

    • Java虚拟机的基本机构?

    • 什么是类加载器?

    • 简单谈一下类加载的双亲委托机制?

    • 普通Java类的类加载过程和Tomcat的类加载过程是否一样?区别在哪?

    • 简单谈一下Java堆的垃圾回收机制?

     

     

    我的博客:Daryl's 博客

    公众号:程序猿刘先森

     
    展开全文
  • Android:Java类加载过程面试题集锦

    千次阅读 2019-07-24 21:47:06
    下述是我收录整理的Android面试题汇总,由于篇幅原因,在这只把Java类加载部分的题目列举出来,后续还会更新其余面试题内容,大家可以关注一下我,及时知晓我更新的知识点,同时这份面试集锦的整理也花...

    前言

    很多人面试之前,可能没有在互联网公司工作过或者说工作过但年头较短,不知道互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。

    下述是我收录整理的Android面试题汇总,由于篇幅原因,在这只把Java类加载部分的题目列举出来,后续还会更新其余面试题内容,大家可以关注一下我,及时知晓我更新的知识点,同时这份面试集锦的整理也花费了我很多时间,有需要的朋友可以帮忙转发分享下,点个赞~

    1、Java的类加载过程

    jvm将.class类文件信息加载到内存并解析成对应的class对象的过程,注意:jvm并不是一开始就把所有的类加载进内存中,只是在第一次遇到某个需要运行的类才会加载,并且只加载一次

    主要分为三部分:1、加载,2、链接(1.验证,2.准备,3.解析),3、初始化

    1:加载

    类加载器包括 BootClassLoader、ExtClassLoader、APPClassLoader

    2:链接

    验证:(验证class文件的字节流是否符合jvm规范)

    准备:为类变量分配内存,并且进行赋初值

    解析:将常量池里面的符号引用(变量名)替换成直接引用(内存地址)过程,在解析阶段,jvm会把所有的类名、方法名、字段名、这些符号引用替换成具体的内存地址或者偏移量。

    3:初始化

    主要对类变量进行初始化,执行类构造器的过程,换句话说,只对static修试的变量或者语句进行初始化。

    范例:Person person = new Person();为例进行说明。

    Java编程思想中的类的初始化过程主要有以下几点:

    1. 找到class文件,将它加载到内存
    2. 在堆内存中分配内存地址
    3. 初始化
    4. 将堆内存地址指给栈内存中的p变量

    以上就是Android Java类加载过程的面试题目,后续还会更新其余面试题内容,大家可以关注一下我,及时知晓我更新的知识点,同时这份面试集锦的整理也花费了我很多时间,有需要的朋友可以帮忙转发分享下,点个赞~

    Android架构师之路很漫长,一起共勉吧!

    展开全文
  • Java常见面试题:加载过程

    千次阅读 2019-04-16 08:59:09
     今天给大家分享的面试题是——加载过程。  类加载过程主要包含加载、验证、准备、解析、初始化、使用、卸载七个方面,下面一一阐述。  一、加载  在加载阶段,虚拟机主要完成三件事:  1.通过一个...

    程序员看似光鲜的就业前景面前,逃不过的是层层的面试,想要进前沿的大公司没有个五六七八面,是不可能滴!而找工作的首个关卡就是笔试,想要获得高薪工作的小伙伴,先刷一波面试题吧!

      今天给大家分享的面试题是——类的加载过程。

    图片1

      类加载过程主要包含加载、验证、准备、解析、初始化、使用、卸载七个方面,下面一一阐述。

      一、加载

      在加载阶段,虚拟机主要完成三件事:

      1.通过一个类的全限定名来获取定义此类的二进制字节流。

      2.将这个字节流所代表的静态存储结构转化为方法区域的运行时数据结构。

      3.在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区域数据的访问入口

      二、验证

      验证阶段作用是保证Class文件的字节流包含的信息符合JVM规范,不会给JVM造成危害。如果验证失败,就会抛出一个java.lang.VerifyError异常或其子类异常。验证过程分为四个阶段

      1.文件格式验证:验证字节流文件是否符合Class文件格式的规范,并且能被当前虚拟机正确的处理。

      2.元数据验证:是对字节码描述的信息进行语义分析,以保证其描述的信息符合Java语言的规范。

      3.字节码验证:主要是进行数据流和控制流的分析,保证被校验类的方法在运行时不会危害虚拟机。

      4.符号引用验证:符号引用验证发生在虚拟机将符号引用转化为直接引用的时候,这个转化动作将在解析阶段中发生。

      三、准备

      准备阶段为变量分配内存并设置类变量的初始化。在这个阶段分配的仅为类的变量(static修饰的变量),而不包括类的实例变量。对已非final的变量,JVM会将其设置成“零值”,而不是其赋值语句的值:

      pirvate static int size = 12;

      那么在这个阶段,size的值为0,而不是12。 final修饰的类变量将会赋值成真实的值。

      四、解析

      解析过程是将常量池内的符号引用替换成直接引用。主要包括四种类型引用的解析。类或接口的解析、字段解析、方法解析、接口方法解析。

      五、初始化

      在准备阶段,类变量已经经过一次初始化了,在这个阶段,则是根据程序员通过程序制定的计划去初始化类的变量和其他资源。这些资源有static{}块,构造函数,父类的初始化等。

      至于使用和卸载阶段阶段,这里不再过多说明,使用过程就是根据程序定义的行为执行,卸载由GC完成。

    展开全文
  • java类加载-面试

    千次阅读 2020-06-28 15:52:57
    一、加载3种方式 由 new 关键字创建一个的实例(静态加载) 在由运行时刻用new 方法载入 如:Dog dog = new Dog(); 调用 Class.forName()方法(动态加载) 通过反射加载类型,并创建对象实例 如:...

    一、类的加载3种方式

    1. 由 new 关键字创建一个类的实例(静态加载
      在由运行时刻用new 方法载入
      如:Dog dog = new Dog();
    2. 调用 Class.forName()方法(动态加载
      通过反射加载类型,并创建对象实例
      如:Class clazz = Class.forName(“Dog”);
      Object dog =clazz.newInstance();
    3. 调用某个 ClassLoader 实例的 loadClass() 方法(动态加载
      通过该 ClassLoader 实例的 loadClass() 方法载入。应用程序可以通过继承 ClassLoader 实现自己的类装载器。
      如:Class clazz = classLoader.loadClass(“Dog”);
      Object dog =clazz.newInstance()

    二、类的加载方式区别

    • 1和2使用的类加载器是相同的,都是当前类加载器。(即:this.getClass.getClassLoader)
    • 3由用户指定类加载器。如果需要在当前类路径以外寻找类,则只能采用第3种方式。第3种方式加载的类与当前类分属不同的命名空间
    • 1是静态加载,2、3是动态加载

    三、两个异常(exception)

    • 静态加载的时候如果在运行环境中找不到要初始化的类,抛出的是NoClassDefFoundError,它在JAVA的异常体系中是一个Error
    • 动态态加载的时候如果在运行环境中找不到要初始化的类,抛出的是ClassNotFoundException,它在JAVA的异常体系中是一个checked异常

    四、Class.forName与ClassLoader.loadClass区别

    • Class的装载包括3个步骤:加载(loading),连接(link),初始化(initialize)
    • Class.forName(className)实际上是调用Class.forName(className, true, this.getClass().getClassLoader())。第二个参数,是指Class被loading后是不是必须被初始化
    • ClassLoader.loadClass(className)实际上调用的是ClassLoader.loadClass(name, false),第二个参数指Class是否被link
    • Class.forName(className)装载的class已经被初始化,而ClassLoader.loadClass(className)装载的class还没有被link。一般情况下,这两个方法效果一样,都能装载Class。但如果程序依赖于Class是否被初始化,就必须用Class.forName(name)
    • 对于相同的类,JVM最多会载入一次。但如果同一个class文件被不同的ClassLoader载入,那么载入后的两个类是完全不同的。因为已被加载的类由该类的类加载器实例与该类的全路径名的组合标识。设有 packagename.A Class ,分别被类加载器 CL1 和 CL2 加载,所以系统中有两个不同的 java.lang.Class 实例: <CL1, packagename.A> 和 <CL2, packagename.A>

    五、类加载过程

    • 每个编写的".java"拓展名类文件都存储着需要执行的程序逻辑------》这些".java"文件经过Java编译器编译成拓展名为".class"的文件-----》".class"文件中保存着Java代码经转换后的虚拟机指令,当需要使用某个类时,虚拟机将会加载它的".class"文件,并创建对应的class对象,将class文件加载到虚拟机的内存,这个过程称为类加载

    • 加载:类加载过程的一个阶段:通过一个类的完全限定查找此类字节码文件,并利用字节码文件创建一个Class对象

    • 验证:目的在于确保Class文件的字节流中包含信息符合当前虚拟机要求,不会危害虚拟机自身安全。主要包括四种验证,文件格式验证,元数据验证,字节码验证,符号引用验证。

    • 准备:为类变量(即static修饰的字段变量)分配内存并且设置该类变量的初始值即0(如static int i=5;这里只将i初始化为0,至于5的值将在初始化时赋值),这里不包含用final修饰的static,因为final在编译的时候就会分配了,注意这里不会为实例变量分配初始化,类变量会分配在方法区中,而实例变量是会随着对象一起分配到Java堆中。

    • 解析:主要将常量池中的符号引用替换为直接引用的过程。符号引用就是一组符号来描述目标,可以是任何字面量,而直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄。有类或接口的解析,字段解析,类方法解析,接口方法解析(这里涉及到字节码变量的引用,如需更详细了解,可参考《深入Java虚拟机》)。

    • 初始化:类加载最后阶段,若该类具有超类,则对其进行初始化,执行静态初始化器和静态初始化成员变量(如前面只初始化了默认值的static变量将会在这个阶段赋值,成员变量也将被初始化)

      这便是类加载的5个过程,而类加载器的任务是根据一个类的全限定名来读取此类的二进制字节流到JVM中,然后转换为一个与目标类对应的java.lang.Class对象实例,在虚拟机提供了3种类加载器,引导(Bootstrap)类加载器、扩展(Extension)类加载器、系统(System)类加载器(也称应用类加载器)

    启动(Bootstrap)类加载器
    • 启动类加载器主要加载的是JVM自身需要的类,这个类加载使用C++语言实现的,是虚拟机自身的一部分,它负责将 <JAVA_HOME>/lib路径下的核心类库或-Xbootclasspath参数指定的路径下的jar包加载到内存中,注意必由于虚拟机是按照文件名识别加载jar包的,如rt.jar,如果文件名不被虚拟机识别,即使把jar包丢到lib目录下也是没有作用的(出于安全考虑,Bootstrap启动类加载器只加载包名为java、javax、sun等开头的类)。
    扩展(Extension)类加载器
    • 扩展类加载器是指Sun公司(已被Oracle收购)实现的sun.misc.Launcher$ExtClassLoader类,由Java语言实现的,是Launcher的静态内部类,它负责加载<JAVA_HOME>/lib/ext目录下或者由系统变量-Djava.ext.dir指定位路径中的类库,开发者可以直接使用标准扩展类加载器。
    系统(System)类加载器
    • 也称应用程序加载器是指 Sun公司实现的sun.misc.Launcher$AppClassLoader。它负责加载系统类路径java -classpath或-D java.class.path 指定路径下的类库,也就是我们经常用到的classpath路径,开发者可以直接使用系统类加载器,一般情况下该类加载是程序中默认的类加载器,通过ClassLoader#getSystemClassLoader()方法可以获取到该类加载器。

    在Java的日常应用程序开发中,类的加载几乎是由上述3种类加载器相互配合执行的,在必要时,我们还可以自定义类加载器,需要注意的是,Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象,而且加载某个类的class文件时,Java虚拟机采用的是双亲委派模式即把请求交由父类处理,它一种任务委派模式,下面我们进一步了解它。

    六、双亲委派模式工作原理

    在这里插入图片描述

    双亲委派机制工作过程:
    • 如果一个类加载器收到了类加载器的请求.它首先不会自己去尝试加载这个类.而是把这个请求委派给父加载器去完成.每个层次的类加载器都是如此.因此所有的加载请求最终都会传送到Bootstrap类加载器(启动类加载器)中.只有父类加载反馈自己无法加载这个请求(它的搜索范围中没有找到所需的类)时.子加载器才会尝试自己去加载。
    双亲委派模型的优点:
    • java类随着它的加载器一起具备了一种带有优先级的层次关系。例如类java.lang.Object,它存放在rt.jart之中.无论哪一个类加载器都要加载这个类.最终都是双亲委派模型最顶端的Bootstrap类加载器去加载.因此Object类在程序的各种类加载器环境中都是同一个类.相反.如果没有使用双亲委派模型.由各个类加载器自行去加载的话.如果用户编写了一个称为“java.lang.Object”的类.并存放在程序的ClassPath中.那系统中将会出现多个不同的Object类.java类型体系中最基础的行为也就无法保证.应用程序也将会一片混乱.

    参考:https://blog.csdn.net/javazejian/article/details/73413292

    展开全文
  • 主要介绍了Java中的加载顺序剖析(常用于面试题),本文直接给出代码实例和运行结果,给后给出了加载过程总结,需要的朋友可以参考下
  • JVM的类加载 我们平时在编译java代码之后,会生成.class文件——字节码文件,JVM会执行字节码文件,JVM执行字节码文件的过程为下面7个阶段 1. 加载 2. 验证 3. 准备 4. 解析 5. 初始化 6. 使用 7. 卸载 ...
  • Java 加载过程(阿里面试题)

    千次阅读 2018-07-03 09:24:32
    /** * 加载方法不等于执行方法,初始化变量则会赋值 * 类加载顺序应为 加载静态方法-初始化静态变量-执行静态代码块 * 实例化时 先加载非静态方法-实例化非静态变量-执行构造代码块-执行构造函数 * @author ...
  • JVM(四)—一道面试题搞懂JVM类加载机制

    万次阅读 多人点赞 2017-07-05 19:35:20
    有这样一道面试题: class Singleton{ private static Singleton singleton = new Singleton(); public static int value1; public static int value2 = 0; private Singleton(){ value1++; ...
  • 类加载过程 Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢? 系统加载 Class 类型的文件主要三步:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。 加载 ...
  • 面试题之请描述一下Java类加载过程

    千次阅读 2020-04-04 19:22:03
    Java类加载过程面试中常问的问题之一,今天我们将对加载的各个过程进行简单的分析和总结,这样在面试的时候对这个问题就有信心回答好了。 二、类加载过程 Java类加载过程包含下面5个步骤: 【a】加载 通过一...
  • 文章目录面试题——new一个对象/创建对象的过程第一步,类加载和初始化(第一次使用该)1. 加载2. 验证3. 准备4. 解析5. 初始化(先父类,再子类)第二步,创建对象1. 在堆区为实例对象分配内存2. 对实例变量赋...
  • 面试题 1、说说java加载机制 2、JDK 动态加载 3、如果加了final,是在加载的什么时候分配的 4、Java加载器有哪些,...一个加载过程?一个自己实现的String, 当new String时,这个String是jdk的String...
  • 面试必问 Java类加载机制和类加载

    千次阅读 多人点赞 2020-06-15 18:49:48
    目前,只要是Java的面试类加载机制一定会被问到。写这篇博客,供小伙伴们参考。
  • 面试必问的 JVM 类加载机制,你懂了吗?

    千次阅读 多人点赞 2021-08-14 14:49:36
    JVM 类加载机制高频面试
  • 阿里面试题,深入理解Java类加载机制 的生命周期 包括以下 7 个阶段: 加载(Loading) 验证(Verification) 准备(Preparation) 解析(Resolution) 初始化(Initialization) 使用(Using) 卸载...
  • 面试官:说一下类加载过程

    千次阅读 多人点赞 2021-07-12 13:55:02
    当我们要使用一个的时候,要通过ClassLoader将类加载到内存中 类加载阶段主要完成如下三件事情 通过全类名,获取的二进制流 解析的二进制流为方法区内的数据结构 创建一个java.lang.Class的实例,表示该...
  • Java基础知识面试题(2020最新版)

    万次阅读 多人点赞 2020-02-19 12:11:27
    核心类库主要是java.lang包:包含了运行Java程序必不可少的系统,如基本数据类型、基本数学函数、字符串处理、线程、异常处理等,系统缺省加载这个包 如果想要运行一个开发好的Java程序,计算机中只需要安装JRE...
  •  初始化是类加载过程的最后一步,前面的类加载过程,除了在加载阶段用户应用程序可以通过自定义加载器参与之外,其余动作完全由虚拟机主导和控制。到了初始化阶段,才真正开始执行中定义的Java程序代码。 ...
  • Spring Bean 的加载过程  一个是populateBean,一个是initializeBean,这两个方法完成了bean的赋值与初始化。  这里有一个BeanDefinitionValueResolver,这个用来解析property里的value,如果是依赖其他bean则会...
  • 面试干货1——请你说说Java加载过程

    千次阅读 热门讨论 2021-05-11 10:00:56
    1. 什么是加载过程         一个Java文件从编码完成到最终运行,一般会经历两个阶段:编译期、运行期。编译,即通过javac命令,将Java文件转化为二进制字节码文件,即....
  • 面试官,不要再问我“Java虚拟机类加载机制”了

    万次阅读 多人点赞 2019-10-27 16:28:39
    关于Java虚拟机类加载机制往往有两方面的面试题:根据程序判断输出结果和讲讲虚拟机类加载机制的流程。其实这两题本质上都是考察面试者对Java虚拟机类加载机制的了解。 面试题试水 现在有这样一道判断程序输出结果...
  • Java面试题大全(2020版)

    万次阅读 多人点赞 2019-11-26 11:59:06
    发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java ...
  • Android 面试必备 - JVM 及 类加载机制

    千次阅读 2019-08-08 23:19:22
    最近准备更新 Android 面试必备基础知识系列,有兴趣的可以关注我的微信公众号 stormjun94,有更新时,第一时间会在微信公众号上面发布,同时,也会同步在 GitHub 上面更新,如果觉得对你有所帮助的话,请帮忙 star...
  • Java中类加载过程是什么样的?

    千次阅读 2020-03-29 09:38:11
    类加载的步骤为,加载 -> 验证 -> 准备 -> 解析 -> 初始化。 1、加载: 获取的二进制字节流 将字节流代表的静态存储结构转化为方法区运行时数据结构 在堆中生成class字节码对象 2、验证:连接过程...
  • 028-JVM-类加载子系统面试题实战

    万次阅读 2020-12-27 14:43:51
    从实践到理论总结的过程 。 1. 分析代码的执行过程 package com.yuhl.c2020; /** * @author yuhl * @Date 2020/12/27 13:55 * @Classname Test2 * @Description TODO */ public class Test2 { public s
  • 从经典面试题看java中加载机制

    万次阅读 2017-05-11 09:23:04
    类加载是Java程序运行的第一步,研究加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行,对理解java虚拟机的连接模型和java语言的动态性都有很大帮助。 由于Java的跨平台性,经过编译的...
  • JVM(三):加载机制(类加载过程加载器)

    万次阅读 多人点赞 2015-08-25 15:38:32
    使用java编译器可以把java代码编译为存储字节码的Class文件,使用其他语言的编译器一样可以把程序代码翻译成Class文件,java虚拟机不...JVM把描述数据的字节码.Class文件加载到内存,并对数据进行校验、转换解析和
  • 面试官:请你谈谈 Java 的类加载过程

    千次阅读 多人点赞 2017-05-06 21:05:36
    刚刚走出校门的应届毕业生,如果在去寻求一份 Java 开发的工作时,你的面试官很有可能一边看着你的简历,一边漫不经心地问你:了解过 Java 加载过程吗? 这个时候你一定要注意了,虽然这是一个老生常谈的问题,...
  • 讲一下JVM加载一个过程 什么时候会为变量分配内存? JVM的类加载机制是什么? 双亲委派机制可以打破吗?为什么 答案放在文章的最后,来不及看原理也可以直接跳到最后直接看答案。 深入原理 的生命周期 ...
  • jvm赋能java跨平台的能力,而...答:java的类加载过程分为 加载,链接,初始化。加载:即从数据源(jar,class,网络)加载class文件到jvm,映射为class对象,如果不是classFile结构,抛出ClassFormatError;链接:把第...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 123,447
精华内容 49,378
关键字:

类的加载过程面试