博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类的生命周期
阅读量:6558 次
发布时间:2019-06-24

本文共 1088 字,大约阅读时间需要 3 分钟。

Java虚拟机及程序的生命周期

java命令运行一个java程序时,就启动了一个java虚拟机进程。

java虚拟机进程从启动到终止的过程,称为java虚拟机的生命周期。

导致虚拟机进程结束的情况包括:

1、程序正常结束

2、执行过程中因出现异常或者错误而终止

3、执行了System.exit()方法

4、操作系统错误导致虚拟机进程停止

类的加载、连接和初始化

java虚拟机要使用某个类时,会确保这个类被加载、连接和初始化。

加载:

连接:

验证:

准备:

解析:

初始化:

类的加载

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

类的加载的最终产品是位于运行时数据区的堆区的Class对象。

Class对象封装了类在方法区内的数据结构,并且向java程序提供了访问类在方法区内的数据结构的接口。

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

Java虚拟机自带的类加载器,有启动类、扩展类和系统类加载器

用户自定义的类加载器,java.lang.ClassLoader类的子类的实例

加载类遇到错误必须等到首次使用时才会报告。

类的验证

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

类的准备

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

类的解析

java会把类的二进制数据中的符号引用替换为直接引用。

直接引用也就是方法区内的内存位置。

类的初始化

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

静态变量的初始化有两种途径:

在静态变量的声明处进行初始化

在静态代码块中进行初始化

静态变量的声明语句,以及静态代码块都被看做类的初始化语句,java虚拟机会按照初始化语句在类文件中的先后顺序来依次执行它们。

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

(1)假如这个类还没有被加载和连接,那就先进行加载和连接。

(2)假如类存在直接父类,并且这个父类还没有被初始化,那就先初始化直接的父类。

(3)假如类中存在初始化语句,那就依次执行这些初始化语句。

类的初始化时机

java虚拟机只有在程序首次主动使用一个类或接口时才会初始化它。

对类或接口的主动使用情况包括:

创建类的实例

调用类的静态方法

访问某个类或接口的静态变量,或者对该变量赋值

调用java API中的某些反射方法

初始化一个类的子类

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

转载地址:http://duhco.baihongyu.com/

你可能感兴趣的文章
被劫持的wordpress.com账户被用来感染站点
查看>>
哄宝宝入睡不再发愁,福特发布Max Motor Dreams智能婴儿床
查看>>
PHP用星号隐藏部份用户名、身份证、IP、手机号等实例
查看>>
分享一下最近看的东西
查看>>
《大数据、小数据、无数据:网络世界的数据学术》一 第2章 何为数据 2.1 引言...
查看>>
WatchStor观察:2008年存储大事记
查看>>
阿里钉钉开启企业服务 让冷冰冰的工作也可以有温度
查看>>
寓教于乐的顶峰:新一届大学生集群竞赛火热开战
查看>>
《计算机科学与工程导论:基于IoT和机器人的可视化编程实践方法第2版》一第1章 职业发展机会和团队建设...
查看>>
HBase BlockCache系列 - 探求BlockCache实现机制
查看>>
中国勒索软件数量增长超过67倍 多层防护机制是防御关键
查看>>
【参与有奖】您用的MySQL、MongoDB、Redis等服务被勒索过吗?
查看>>
Java核心技术卷I基础知识1.2.6 体系结构中立
查看>>
Libvirt 虚拟化库介绍
查看>>
Xmemcached发布1.2.6.1(推荐升级)
查看>>
《Spark官方文档》Spark Streaming编程指南(一)
查看>>
《Spring 5 官方文档》26. JMS(一)
查看>>
《Python Cookbook(第2版)中文版》——1.11 检查一个字符串是文本还是二进制
查看>>
Tkinter之Label
查看>>
Java操作redis
查看>>