Java类加载机制(加载、验证、准备、解析、初始化)
如下图所示,Java的类加载机制主要分为三个部分,分别为加载、链接、初始化。其中链接又分为三个小部分——验证、准备、解析。
- 加载——在经过对Java代码进行编译后,JVM将Java类编译后的二进制文件即字节码文件以二进制的形式加载到内存放中,以便后面的步骤进行,如果没有找到指定的类,就会抛出错误,进程到这里也就结束了。
- 验证——验证即验证Java加载进内存的二进制文件是否符合JVM以及Java规范,并且不会危害虚拟机的自身安全。比如说符号引用中的类、字段、方法的访问性(private、protected、public、default)是否可被当前类访问、类中的字段、方法是否与父类产生矛盾……
- 准备——准备阶段是指准备要执行的制定的类,这包含了给这个类的静态变量和其他数据分配内存空间(仅仅是分配内存空间,具体初始化在最后一步)。
- 解析——解析阶段是指检查指定的类是否引用了其他的类、接口,然后对于这些内容递归的进行以上加载、验证、准备三个步骤。
- 初始化——在这最后一步中,JVM用赋值或者缺省值将静态变量进行初始化,并执行静态初始化程序(static块中的代码),初始化发生在执行main方法之前,但在指定的类初始化之前他的父类必须先初始化,若其父类仍然存在父类,那也需递归的初始化。
例如,如果一个类中包含声明public static int a=5;
那么变量a被赋值为5的过程将在初始化阶段进行,另外倘若静态变量并没有指定初值,那么JVM会自动给静态变量赋予一个初值,下表给出Java基本类型和引用变量的缺省值。
类型 | 默认值 | 类型 | 默认值 | 类型 | 默认值 |
---|---|---|---|---|---|
boolean | false | int | 0 | float | 0.0f |
byte | 0 | long | 0L | double | 0.0d |
short | 0 | char | \u0000 | object reference | null |
参考资料:
Java编程指南
http://www.importnew.com/25295.html
Java类加载机制(加载、验证、准备、解析、初始化)的更多相关文章
- Java中类的加载、连接和初始化
Java中类的加载.连接和初始化 类的加载.连接和初始化 先介绍一下JVM和类 JVM和类: 当我们调用Java命令运行某个Java程序时,该命令将会启动一个Java虚拟机进程,不管该Java程序有多 ...
- JAVA类的加载、连接与初始化
JAVA类的加载.连接与初始化 类的声明周期总共分为5个步骤1.加载2.连接3.初始化4.使用5.卸载 当java程序需要某个类的时候,java虚拟机会确保这个类已经被加载.连接和初始化,而连接这个类 ...
- java 类的加载,链接,初始化
本篇的话题,讨论Java类的加载.链接和初始化.Java字节代码的表现形式是字节数组(byte[]),而Java类在JVM中的表现形式是java.lang.Class类的对象.一个Java类从字节代码 ...
- java类加载器加载文件
例子:采用配置文件加反射的方式创建ArrayList和HashSet的实例对象. //第一种方式:类加载器加载文件 InputStream ips = ReflectTest2.class.getCl ...
- java类的加载、链接、初始化
JVM和类的关系 当我们调用JAVA命令运行某个java程序时,该命令将会启动一条java虚拟机进程,不管该java程序有多么复杂,该程序启动了多少个线程,它们都处于该java虚拟机进程里.正如前面介 ...
- Java类的加载、链接和初始化
一.Java的类加载机制回顾与总结: 我们知道一个Java类要想运行,必须由jvm将其装载到内存中才能运行,装载的目的就是把Java字节代码转换成JVM中的java.lang.Class类的对象.这样 ...
- java类从加载、连接到初始化过程
类加载器 在了解Java的机制之前,需要先了解类在JVM(Java虚拟机)中是如何加载的,这对后面理解java其它机制将有重要作用. 每个类编译后产生一个Class对象,存储在.class文件中,JV ...
- java 类的加载、连接和初始化
JVM和类 调用Java命令运行Java程序时,该命令将会启动一条Java虚拟机进程,不管该Java程序启动了多少条线程,创建了多少个变量,它们都处于该Java虚拟机进程里,共享该JVM进程的内存区. ...
- java虚拟机规范-加载、链接与初始化
前言 java虚拟机是java跨平台的基石,本文的描述以jdk7.0为准,其他版本可能会有一些微调.java代码本身并不能为jvm识别,实际上在jvm中的表现形式为Class对象,一个java类从字节 ...
随机推荐
- CLion之C++框架篇-优化框架,单元测试(二)
背景 结合上一篇CLion之C++框架篇-安装工具,基础框架的搭建(一),继续进行框架优化! googletest(GTest)是Google开源的C++测试框架,与CLion组合,对C++环 ...
- 背水一战 Windows 10 (103) - 通知(Toast): 基础, 按计划显示 toast 通知
[源码下载] 背水一战 Windows 10 (103) - 通知(Toast): 基础, 按计划显示 toast 通知 作者:webabcd 介绍背水一战 Windows 10 之 通知(Toast ...
- MySQL注入技巧性研究
0x00 前言 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,本人最近针对MySQL注入做了 ...
- BeanPostProcessor —— 连接Spring IOC和AOP的桥梁
之前都是从大Boss的视角,来介绍Spring,比如IOC.AOP. 今天换个视角,从一个小喽啰出发,来加深对Spring的理解. 这个小喽啰就是, BeanPostProcessor (下面简称 B ...
- C/C++ 多线程机制
一.C/C++多线程操作说明 C/C++多线程基本操作如下: 1. 线程的建立结束 2. 线程的互斥和同步 3. 使用信号量控制线程 4. 线程的基本属性配置 在C/C++代码编写时,使用多线程机制, ...
- Javascript高级编程学习笔记(49)—— DOM2和DOM3(1)DOM变化
DOM变化 我们知道DOM有许多的版本,其中DOM0和DOM2这两个级别以对事件的纳入标准而为人所知 但是呢,这里不讲事件,在后面会有专门和事件有关的部分作为详细讲解 这里就只讲一下DOM2和DOM3 ...
- 编译u-boot问题总结
问题一: /usr/local/JreTool/opt/FriendlyARM/toolschain/4.4.3/bin/.arm-none-linux-gnueabi-ld: warning: cr ...
- Java 中初始化 List 集合的 6 种方式!
List 是 Java 开发中经常会使用的集合,你们知道有哪些方式可以初始化一个 List 吗?这其中不缺乏一些坑,今天栈长我给大家一一普及一下. 1.常规方式 List<String> ...
- MySQL5.7免安装版配置图文教程
MySQL5.7免安装版配置图文教程 更新时间:2017年09月06日 10:22:11 作者:吾刃之所向 我要评论 Mysql是一个比较流行且很好用的一款数据库软件,如下记录了我学习总结的 ...
- win10安装MySQL5.7.21
一. 下载MySQL 1. 打开MySQL官网,选择DOWNLOADS --> Community 2. 下拉页面找到MySQL on Windows(installers & tool ...