旗下导航:搜·么
当前位置:网站首页 > JAVA教程 > 正文

jvm类加载的历程是什么?【JAVA教程】,jvm

作者:搜教程发布时间:2019-11-27分类:JAVA教程浏览:69评论:0


导读:jvm类加载的历程分为三步:加载、衔接和初始化。加载经由过程类的全途径将这个类从外部加载到jvm中,同时在要领区生成该类的形貌信息并在内存生成该类的Claas范例。...

jvm类加载的历程分为三步:加载、衔接和初始化。

加载

经由过程类的全途径将这个类从外部加载到jvm中,同时在要领区生成该类的形貌信息并在内存生成该类的Claas范例。作为要领区这个类的数据接见进口。

衔接

这是很主要的一步,历程比较复杂,分为三步:考证、预备和剖析。   

考证:确保类加载的正确性。平常状况由javac编译的class文件是不会有题目的,然则能够有人的class文件是本身经由过程其他体式格局编译出来的,这就很有能够不符合jvm的编 译划定规矩,这一步就是要过滤掉这部份不合法文件 

预备:为类的静态变量分派内存,将其初始化为默认值 。我们都晓得静态变量是能够不必我们手动赋值的,它天然会有一个初始值 比方int 范例的初始值就是0 ;boolean范例初始值为false,援用范例的初始值为null 。 这里注重,只是为静态变量分派内存,此时是没有对象实例的 

剖析:把类中的标记援用转化为直接援用。解释一下标记援用和直接援用。比方在要领A中运用要领B,A(){B();},这里的B()就是标记援用,初学java时我们都是晓得这是java的援用,以为B指向B要领的内存地址,然则这是不完整的,这里的B只是一个标记援用,它关于要领的挪用没有太多的现实意义,能够这么以为,他就是给程序员看的一个标志,让程序员晓得,这个要领能够这么挪用,然则B要领现实挪用时是经由过程一个指针指向B要领的内存地址,这个指针才是真正担任要领挪用,他就是直接援用。

初始化

在初始化阶段会挪用类的初始化要领clinit()为静态变量给予现实的值(比方将value赋值为123)、实行静态代码块。在 JVM 范例中没有强迫束缚加载的机遇,不过关于初始化,JVM范例严厉划定了有且只要5种状况必需立即对类举行初始化:

下面我们解说 一下clinit()要领是怎样生成的。clinit()要领是编译器 自动网络类中的静态变量和静态语句所发生的。编译器网络的递次是由语句涌现的递次 所 决议的,静态语句块只能复制定义在它背面的变量,然则不能运用,以下 图 所示,而且虚拟机范例保证,父类的clinit()要领肯定 在子类之前实行,但不是 经由过程继续来的。

以上就是jvm类加载的历程是什么?的细致内容,更多请关注ki4网别的相干文章!

标签:jvm


欢迎 发表评论: