`

JVM如何加载类(类的生命周期)

jvm 
阅读更多

类的生命周期:

简介java虚拟机的作用:java虚拟机为java程序提供运行时环境,其中一个重要的任务就是管理类和对象的生命周期,类的生命周期从类被加载、连接和初始化开始,到类被卸载结束。当类处于生命周期时,它的二进制数据位于方法区内,在堆区中还有一个描述该类的Class对象。只有当类处于生命周期中时,java程序才能使用它,比如调用类的静态变量,静态方法和创建类的实例。

java虚拟机加载某个类过程:

1、加载:查找并加载类的二进制数据

2、连接:包括验证、准备和解析类的二进制数据

     a、验证:确保加载类的正确性

     b、准备:为类的静态变量分配内存并将其初始化为默认值

     c、解析:把类的符号应用转换为直接应用

3、初始化:为类的静态变量赋予正确的初始值

加载详解:

类的加载是把类的.class文件中的二进制数据读入到内存中,把它放到运行时数据区的方法区内,然后在堆区创建一个java.lang.class对象,用类封装类在方法区内的数据结构。

类的加载的最终产品时位于运行时数据区内的堆区的class对象。class对象封装了类在方法区内的数据结构,并且向java程序提供了访问类在方法区内的数据结构的接口。

类的加载是由类的加载器完成的,类的加载器分为两种:

一是:java虚拟机自带的加载器,包括启动类加载器、拓展类加载器、系统类加载器。

二是:用户自定义的类的加载器,是java.lang.ClassLoader类的子类的实例,用户可以通过定制它来定制类的加载方式。

类的验证:

 当类被加载后,就进入到连接阶段。连接就是把已经读入到内存中的类的二进制数据合并到虚拟机的运行时环境中去。

类的验证包括如下内容:

1、类文件的结构检查:确保类文件遵从java类文件的固定格式

2、语义检查:确保类本身符合java语言的语法规定,比如final修饰的类有没有子类,final修饰的方法有没有被覆盖等等

3、字节码检查:确保字节码流可以被java虚拟机安全的执行

4、二进制兼容验证:确保相互应用类之间的协调一致

类的准备:

在准备阶段,java虚拟机为类的静态变量分配内存,并赋予默认初始值。

类的解析:

在类的解析阶段,java虚拟机把类中的二进制数据中的符号引用替代为直接引用

类的初始化:

在初始化阶段,java虚拟机执行类的初始化语句,为类的静态变量赋予初始值。

静态变量的初始化有两种方式:一种是在声明时初始化,另一种是在静态代码块中初始化。

java虚拟机初始化一个类包含以下步骤:

a、加入这个类还没有被加载和连接,那就先进性加载和连接。

b、加入这个类存在直接父类,并且这个父类还没有被初始化,那就先初始化直接父类。

c、加入类中很有初始化语句,那就依次执行这些初始化语句。

类的初始化时机:

如下六种活动被看做程序对类或接口的主动使用:

a、创建类的实例。包括new关键字创建,通过反射、克隆创建

b、调用类的静态方法

c、访问某个类或接口的静态变量,或给这些静态变量赋值。

d、调用java api中的某些反射方法

e、初始化一个类的子类。

f、java虚拟机启动时被标明为启动类的类

特殊情况:

a、对于final的静态常量,如果在编译时能够计算出变量的取值,那么使用该静态常量不会导致类的初始化。

b、对于final的静态常量,如果在编译时不能够计算出变量的取值,那么使用该静态常量会导致类的初始化。

c、当java虚拟机初始化一个类时,要求他的所有父类已经被初始化,但这条规则不适用于接口

分享到:
评论

相关推荐

    Java虚拟机JVM类加载初始化

    由Java虚拟机自带的默认加载器(根加载器、扩展加载器、系统加载器)所加载的类在JVM生命周期中始终不被卸载。所以这些类的Class对象(我称其为实例的模板对象)始终能被触及!而由用户自定义的类加载器所加载的类会...

    JVM 工作原理

    JVM的生命周期 JVM的体系结构 JVM类加载器 JVM执行引擎 JVM运行时数据区 JVM垃圾回收 问题

    第三章:类的加载过程(类的生命周期)详解.mmap

    第三章:类的加载过程(类的生命周期)详解.mmap

    详解java类的生命周期

    本文详细讲述了一个java类自调入内存至被卸载的整个声明周期,对理解对象的生命周期,jvm中的类加载等内容有所帮助。

    最新java面试专题01-JVM

    JVM生命周期:JVM的生命周期始于启动一个Java程序,此时会创建一个JVM实例。程序中的public static void main(String[] args)方法作为JVM实例运行的起点。 垃圾收集:JVM具有自动内存管理和垃圾收集机制,用于自动...

    很入理解JVM体系

    4、JVM生命周期 5、三大流行的JVM 2.2、JVM体系结构 1、类加载器 2、执行引擎 3、运行时数据区 4、本地库接口 2.3、JVM内存参数调整及监控 1、JVM之内存调整 2、JVM监控工具之Jconsole 3、JVM监控工具之JProfile ...

    java类加载机制.xmind

    该文件是JVM中关于类加载机制的知识整理的思维导图,包括类加载机制概述、类加载的生命周期、加载时机、加载过程、类加载、类的初始化和实例化等几个大方面进行了讲解,其中类加载中还对JVM三种预定义类加载器进行了...

    JVM—类加载过程学习

    其实,整个生命周期是7步,类从被加载到虚拟机内存中开始,到卸载出内存为止,分为:加载->验证->准备->解析->初始化->使用->卸载。 2 加载   加载分为三步: 1)通过全类名获取定义此类的二进制字节流; 2)将...

    关于JVM的总结

    类被加载到虚拟机内存开始,到卸载出内存为止,生命周期包含: 加载,验证,准备,解析,初始化,使用,卸载 7个阶段,加载,验证,准备,初始化和卸载这5个顺序是确定的,解析阶段则不一定,他在某些情况下可以在...

    免费超全面的Java基础类型,容器,并发,IO流,面向对象,Web编程等代码总结

    JVM类加载机制 JVM运行时区数据 JVM执行引擎和垃圾回收 基础语法 理解Java中对象基础Object类 基本数据类型,核心点整理 特殊的String类,以及相关扩展API 日期与时间API详解 流程控制语句,和算法应用 函数式编程...

    JVM面试专题

    目录 1.jvm内存结构 ...9、类的生命周期【加载过程】 10、Java 中会存在内存泄漏吗,请简单描述。 11、GC是什么?为什么要有GC? 12、做GC时,⼀个对象在内存各个Space中被移动的顺序是什么? 13、你知道哪些垃

    阿里巴巴面试题总结

    生命周期包括哪几个阶段? 答:7个阶段,分别是:加载、验证、准备、解析、初始化、使用和卸载。 2. java有多少个类加载器?分别的作用是什么?一个Class文件是怎么被加载 到JVM里的,描述一下加载流程。 答:java...

    Android静态变量的生命周期 简单介绍

    在PC机的客户端程序中,一个类被加载和卸载,可简单的等同于jvm进程的启动和结束。那么在Android中呢?用的Dalvik vm也是一样的。不过Android不太突出的进程概念,所以对静态变量的生命周期就会感觉模糊,这种模糊...

    Java虚拟机类加载机制浅谈

    Java语言是一种编译后再经过解释器执行的过程, 解释器主要是如何处理解释Class文件的二进制字节...  一个类的整个生命周期如下:  加载,验证,准备,初始化和卸载在开始的顺序上是固定的,但是可以交叉进行。

    21天学会Java之(Java SE第四篇):Java虚拟机、垃圾回收机制

    文章目录Java虚拟机(JVM)JVM的基本结构类加载机制类的生命周期类加载器的种类类加载机制运行时数据区(内存分析)垃圾回收机制新生代(Young Generation)老年代(Old Generation)元空间(Meta Space) Java虚拟机...

    java7rt.jar源码-Java_JVM:这是我的JavaJVM学习笔记

    JVM的生命周期: 1.启动 通过引导类加载器(Bootstrap class loader)创建一个初始类(Initial Class)来完成 2.执行 执行一个所谓的Java程序时,真正的执行的是一个叫做Java虚拟机的进程 3.退出 程序正常结束;程序...

    深入理解ClassLoader工作机制.docx

    JVM内存模型,类加载模式工作机制详细,内存屏障,类从被加载到虚拟机内存中开始,直到卸载出内存为止,它的整个生命周期包括了:加载、验证、准备、解析、初始化、使用和卸载这7个阶段。其中,验证、准备和解析这三...

    java加载机制.png

    1.java源文件是怎么编译成class文件的 2.类的生命周期 3.java类加载机制 4.类的加载 5.类的加载过程 6.类是怎么被初始化的? .....

Global site tag (gtag.js) - Google Analytics