美文网首页
一、初识类的加载过程

一、初识类的加载过程

作者: 社会yang | 来源:发表于2019-11-27 19:55 被阅读0次

在java的程序中类的加载、连接、初始化都是在程序的运行期间完成的,具体如下:

一、加载:将磁盘中编译后的class文件加载到内存中(主要是指加载类的二进制文件)

二、连接: 主要分为三部分

    1):    验证:  确保被加载类的正确性

    2):    准备:  为类的静态变量分配内存,并将其初始化为默认值(4类8种的默认值)

    3):    解析:   将类中的符号引用转换为直接引用

三、初始化:将类中的静态变量赋予正确的初始值

四、使用:类的使用,类初始化完成后可以直接使用(作为对象模板的创建使用、或者使用类的静态变量等等)

五、卸载:类可以卸载,及从内存中删除,被卸载完成后类就不能使用了

java虚拟机结束生命周期有以下几种情况:

1:执行System.exit()方法

2:程序正常结束

3:程序在运行过程中遇到错误或者异常而异常终止

4:由于操作系统出现错误而导致java虚拟机的终止

符号引用与直接引用的区别

符号引用(Symbolic References):符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能够无歧义的定位到目标即可。例如,在Class文件中它以CONSTANT_Class_info、CONSTANT_Fieldref_info、CONSTANT_Methodref_info等类型的常量出现。符号引用与虚拟机的内存布局无关,引用的目标并不一定加载到内存中。在Java中,一个java类将会编译成一个class文件。在编译时,java类并不知道所引用的类的实际地址,因此只能使用符号引用来代替。比如org.simple.People类引用了org.simple.Language类,在编译时People类并不知道Language类的实际内存地址,因此只能使用符号org.simple.Language(假设是这个,当然实际中是由类似于CONSTANT_Class_info的常量来表示的)来表示Language类的地址。各种虚拟机实现的内存布局可能有所不同,但是它们能接受的符号引用都是一致的,因为符号引用的字面量形式明确定义在Java虚拟机规范的Class文件格式中。

直接引用:

直接引用可以是

(1)直接指向目标的指针(比如,指向“类型”【Class对象】、类变量、类方法的直接引用可能是指向方法区的指针)

(2)相对偏移量(比如,指向实例变量、实例方法的直接引用都是偏移量)

(3)一个能间接定位到目标的句柄

直接引用是和虚拟机的布局相关的,同一个符号引用在不同的虚拟机实例上翻译出来的直接引用一般不会相同。如果有了直接引用,那引用的目标必定已经被加载入内存中了

相关文章

  • 一、初识类的加载过程

    在java的程序中类的加载、连接、初始化都是在程序的运行期间完成的,具体如下: 一、加载:将磁盘中编译后的clas...

  • JVM整理相关目录

    一、初识类的加载过程 主要介绍类的加载过程、以及java虚拟机生命周期的结束方式、符号引用与直接引用的区别 地址:...

  • 第一章 类加载过程

    要点 类加载过程 类加载器 一、类加载过程 1.类的加载过程 类的加载 .class文件过程分为:加载---->连...

  • 2019年JVM面试都问了什么?快看看这22道面试题!(附答案解

    一. Java 类加载过程? Java 类加载需要经历一下 7 个过程: 1. 加载 加载是类加载的第一个过程,在...

  • JVM总括四-类加载过程、双亲委派模型、对象实例化过程

    JVM总括四-类加载过程、双亲委派模型、对象实例化过程 目录:JVM总括:目录 一、 类加载过程 类加载过程就是将...

  • 深入浅出Java类加载机制

    初识ClassLoader ClassLoader类加载器在Java中的定义就是用来加载其他类到Jvm中的操作类,...

  • 面经题目学习

    java类加载过程类加载过程:加载、验证、准备、解析、初始化。类加载过程中主要是将Class文件(类的二进制字节流...

  • jvm相关面试题

    类加载的过程 classLoader.loadClass的类加载过程有如下几步:加载 >> 验证 >> 准备 >>...

  • 深入理解jvm类加载机制

    1.什么是类加载? 类加载机制一个很大的体系,包括类加载的时机,类加载器,类加载时机。 1.1类加载过程 加载器加...

  • Java类加载问题

    类加载过程类加载过程:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。一个非数组类的加载阶段(...

网友评论

      本文标题:一、初识类的加载过程

      本文链接:https://www.haomeiwen.com/subject/nidmwctx.html