文档章节

Java类加载过程

m
 modprobe
发布于 2016/11/08 09:56
字数 887
阅读 2
收藏 0
点赞 0
评论 0

  一个.class文件定义了JVM中一个类型,包括域、方法、继承信息、注解和其他元数据。规范中对类文件的格式有详细描述,任何想在JVM上运行的语言都必须遵守。

  

  JVM的目的是使用类文件并执行其中的字节码。要实现这个目的,JVM必须以字节流的方式取出类文件中的内容,并将其转换成可用的格式加入运行状态中。这个分两步走的过程被称为加载和连接,但连接又被分解为几个子阶段。

 

加载

  这个过程首先要读取构成类文件的字节数据流并给类的表现形式解冻。该过程一开始是创建一个字节数组,其内容通常是从文件系统中读取的,然后产生所加载的类对应的Class对象。在这个过程中会对类做一些基本检查,但在加载过程结束时,Class对象还不成熟,所以类也不可用。

 

连接

  加载完成之后,类必须被连接起来,这一步骤分为三个子阶段  验证、准备、解析。验证阶段证实类文件符合预期,不会引起系统的运行时错误或其他问题。之后是类的准备阶段,在类文件中引用的其他类型全部都要定位到,以确保该类已准备就绪。连接步骤中各子阶段的相互关系 如下图

 

验证

  验证是一个非常复杂的过程,它分为几个步骤,首先是完整性检查,这实际上是加载过程中的一部分,会确保类文件格式良好,可以连接接着是检查常量池中的符号信息是自相一致的,并要遵守常量的基本行为准则。其他不涉及代码的静态检查也要在这一阶段完成,比如检查final方法有没有被重写。之后是验证中最复杂的部分,方法的字节码检查,要检查字节码行为良好,并且不会试图摆脱VM的环境控制,下面是一些主要的检查

  • 是否所有的方法都遵守访问控制关键字的限定
  • 方法调用的参数个数和静态类型是否正确
  • 确保字节码不会试图滥用堆栈
  • 确保变量使用之前被正确初始化了
  • 检查变量是否仅被赋予恰当类型的值

 

准备

  类的准备包括分配类存和准备好初始化类中的静态变量,但不会现在初始化变量,也不会执行任何VN字节码

 

解析

  解析会初始VM检查类文件中所引用的类型是不是都是已知的类型。如果有运行时位置的类型,那他们也需要被加载进来。这行可见的未知类型会再次引发类加载过程。一旦需要加载的其他类型全被定位并解析完成,VM就可以初始化那个最初要加载的类。这时候所有的静态变量都可以被初始化,所有的静态初始化代码块都会运行。现在你运行的字节码就是来自新加载进来的类里的。这一步完成之后,所有的类就已全部完成,类也可以使用了。

 

本文转载自:http://www.cnblogs.com/modprobe/p/4951714.html

共有 人打赏支持
m
粉丝 1
博文 35
码字总数 0
作品 0
JVM-ClassLoader

<谭锋>整理 为了支持跨平台的特性,java语言采用源代码编译成中间字节码,然后又各平台的jvm解释执行的方式。字节码采用了完全与平台无关的方式进行描述,java只给出了字节码格式的规范,并没...

项籍20130121
2013/07/11
0
0
java.lang.ClassNotFoundException后续

问题:在用Eclipse开发JAVA Web程序过程,用JSP实现数据库连接,在加载数据库驱动时,出现了java.lang.ClassNotFoundExcetpion异常 ? 解决方案1:编写测试类,引入mysql-connector-java-5....

zjut_l
2013/06/23
0
0
Java 面试知识点解析(三)——JVM篇

前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大部...

我没有三颗心脏
05/16
0
0
Java类加载及变量初始化过程

Java虚拟机如何把编译好的.class文件加载到虚拟机里面?加载之后如何初始化类?静态类变量和实例类变量的初始化过程是否相同,分别是如何初始化的呢?这篇文章就是解决上面3个问题的。 本文前...

kalo
2014/09/29
0
0
Java 类加载机制 ClassLoader Class.forName 内存管理 垃圾回收GC

Java之类加载机制 类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行。 研究类加载机制的第二个目的是让程序能动态的控制类加载...

underA
2013/10/24
0
0
两道面试题,带你解析Java类加载机制

文章首发于【博客园-陈树义】,点击跳转到原文《两道面试题,带你解析Java类加载机制》 在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: 请写出最后的输出字符...

陈树义
06/12
0
0
您真的明白java环境变量的配置吗?

首先,我们来看一看当我们用命令执行javac和java的时候,系统做了些什么工作,假如我们现在有一个文件夹如下图1所示,有两个java文件。 图1:文件目录示意图 其中,Main.java的内容非常简单:...

trayvon
2015/11/16
0
0
《深入理解Java虚拟机》之类加载机制(6)

java语言是一种编译后再经过解释器执行的过程, 解释器主要就是如何处理解释Class文件的二进制字节流。JVM主要包含三大核心部分:运行时数据区,类加载器和执行引擎。 虚拟机将描述类的数据从...

lixiyuan
2014/04/11
0
0
深度探讨Java字节代码的操纵方法

本文为IBM工程师成富编写的《Java深度历险》的第一部分Java字节代码的操纵,像这样Java语言的深度理解和运用还没有很多文章,我们把他奉献给读者,希望读者们喜欢。 51CTO编者按:我们曾给大...

mj4738
2011/11/02
0
0
面试中关于Java虚拟机(jvm)的问题看这篇就够了

最近看书的过程中整理了一些面试题,面试题以及答案都在我的文章中有所提到,希望你能在以问题为导向的过程中掌握虚拟机的核心知识。面试毕竟是面试,核心知识我们还是要掌握的,加油~~~ 下面...

snailclimb
05/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式 Factory工厂模式 Singleton单例模式 Delegate委派模式 Strategy策略模式 Prototype原型模式 Template模板模式 Spring5 beans 接口实例化 代理Bean操作 ...

小致dad
12分钟前
0
0
SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
9
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
9
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
202
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部