`
yuyiming1986
  • 浏览: 63303 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

深入JVM读书笔记之类装载+连接+初始化

阅读更多
    Java虚拟机通过装载,连接和初始化一个Java类型,来创建一个新的类型对象,使此类型可以被正在运行中的Java程序所使用。装载就是把二进制形式的Java类型读入Java虚拟机中;而连接就是把这种已经读入虚拟机的二进制形式的类型数据合并到虚拟机的运行时状态中去;初始化则是给类对象成员变量赋予正确的初始值,通过调用构造函数,静态初始块或者构造块实现。




装载

  装载阶段由三个基本动作组成,要装载一个类型,Java虚拟机必须:

  (1).通过此类型的完全限定名,产生一个代表此类型的二进制数据流。
      class文件可以从多个源进行加载:
      本地文件系统上装载一个java class文件
      从一个ZIP, JAR, CAB或者其他某种归档文件中提取Java class文件
      从一个专有数据库中提取Java class文件
      把一个Java源文件动态编译为class文件格式
      通过网络下载 一个Java class文件

  (2).解析这个二进制数据流为方法区内的内部数据结构。(也就是此类型的,成员方法,成员属性,实现或者继承的接口,父类等等)

  (3).创建一个表示此类型的java.lang.Class类的实例。装载步骤的最终产品就是这个Class为的实例对象,它成为Java程序与内部数据结构之间的接口。要访问关于此类型的信息(它们存储在内部数据结构中,具体是方法区中),程序可以调用此类型对应的Class实例对象的方法。(通过Class对象的接口可以用来实现反射机制,在Java程序运行时,动态获取类的成员信息)

   这样一个过程,就是把一个类型的二进制数据解析并存储为方法区中的内部数据结构,并在堆上建立一个Class对象,被外部Java程序用来访问此类型的所有信息。通过类装载器来实现将Class文件装载进入Java虚拟机。


  连接
  连接分为三个子步骤:
  (1).验证  确保了Java类型数据格式正确并且适合java虚拟机使用。
  (2).准备  负责为此类型分配它所需的内存,比如为它的类变量分配内存,并设置默认的初始值,并不会执行任何代码。
  (3).解析 负责把常量池中的符号引用转换为直接引用,在一个Java类中会包含对其它类或接口的形式引用,包括它的父类,所实现的接口,方法形参,返回值的Java类。解析的过程就是确保这些引用的类能够被正确的找到,解析的过程可能会导致其它的Java类被加载。

      虚拟机的实现可以推迟解析这一步,它可在当运行中的程序真正使用某个符号引用时再去解析.解析过程就是在类型的常量池中查找类,接口,字段和方法的符号引用,把这些符号引用替换成直接引用的过程,在符号引用被程序首次使用之前,连接的这个步骤都是可选的。

初始化
  为了准备让一个类或者接口被首次主动使用,最后一个步骤就是初始化,也就是为类变量赋予正确的初始值。正确的初始值是和在准备阶段赋予的默认初始值对比而言的。通过初始化块,static块,构造函数来实现的.
  • 大小: 25.1 KB
分享到:
评论
1 楼 zhengjj_2009 2012-04-20  
问你一个小问题,“Java虚拟机通过装载,连接和初始化一个Java类型”中的“一个Java类型”是指什么?你是看《深入JVM》这本书摘录的吗?我是查看了英文版的《深入JVM》才知道一个Java类型是指啥含义。

相关推荐

    java之jvm学习笔记五(实践写自己的类装载器)

    4. **链接与初始化**:一旦`Class`对象被定义,JVM会进行链接(包括验证、准备和解析)和初始化,使类准备好执行。 自定义类装载器的应用场景广泛,例如实现类的版本控制、热部署、模块化系统等。在开发过程中,你...

    jvm视频及笔记

    2. **类装载机制**:包括加载、验证、准备、解析和初始化五个阶段,确保类的正确性和安全性。 3. **内存模型**:包括堆内存、栈内存、方法区(在Java 8之后变为元空间)、程序计数器、本地方法栈等,理解它们的作用...

    JVM学习资料+笔记

    1. 类加载机制:JVM按照类加载器、双亲委派模型、验证、准备、解析、初始化等步骤加载类。了解这一过程有助于理解类的生命周期和防止类冲突。 2. 字节码执行引擎:JVM通过解释器和即时编译器(JIT)来执行字节码,...

    《JVM从入门到入魔》笔记.pdf

    1:JVM内存模型:类加载机制【转载、验证、准备、解析、初始化】+类装载器【装载器分类、加载原则】+运行时数据区【方法区、堆、虚拟机栈、本地方法栈、程序计数器】。 2:垃圾回收:垃圾确定【引用计数法、可达性分析...

    JVM的学习笔记PDF版

    类加载器根据全限定名动态加载类文件,验证确保类文件的正确性,准备阶段分配内存并初始化静态变量,解析将符号引用转换为直接引用,最后初始化执行类构造器。 3. **运行时数据区**:包括程序计数器、虚拟机栈、...

    JVM和性能优化学习思维笔记.rar

    例如,类装载器负责加载类到JVM,而运行时数据区包括堆内存、栈内存、方法区等,其中垃圾回收机制是优化的重要一环。 接着,深入理解JVM内存模型至关重要。Java对象在堆内存中分配,而栈内存存储方法的局部变量。...

    【Java技术资料】-(机构内训资料)JVM和性能优化学习思维笔记

    5. **类加载机制**:了解双亲委派模型,理解类装载、验证、准备、解析和初始化的过程。 6. **性能监控和诊断工具**:如JConsole、VisualVM、JProfiler等,它们可以帮助开发者监控JVM状态,定位性能瓶颈。 7. **JVM...

    jvm-study:jvm学习笔记

    本学习笔记旨在全面解析JVM的工作原理,涵盖内存管理、类加载机制、垃圾收集、性能调优等多个关键领域,帮助读者从基础到深入地掌握JVM。 1. **JVM结构与运行过程** - JVM由类装载器、运行时数据区、执行引擎、...

    JVM学习资料(zzm版3).rar

    - **初始化**:执行类的初始化方法(),如静态变量的显式初始化。 3. **垃圾收集与内存管理**: - **对象分配**:新生代和老年代的策略,如 Minor GC 和 Major GC。 - **垃圾收集器**:不同的JVM版本提供了多种...

    Java面向对象程序设计笔记

    本笔记将深入探讨Java语言的特点、面向对象编程的基本概念、Java应用程序的开发环境配置,以及类的设计、对象构造等关键点。 Java语言产生的目的在于提供一个跨平台的、安全的、可移植的编程环境。其诞生于1995年,...

    java-SE-马士兵笔记word

    - 成员变量系统可以自动初始化,局部变量则需要显式初始化。 - 类定义静态概念,对象是动态实例化出来的,位于堆内存中。 - **对象创建**: - 使用`new`关键字创建对象。 - 每个对象拥有独立的成员变量存储空间...

    JAVA_SE毕向东 笔记

    - Java中可以通过使用`final`关键字定义常量,一旦初始化后就不能改变。 10. **命名规则**: - 所有的变量、方法、类名都应该见名知意,即通过名称就能大致了解其用途或功能。 - 类成员变量和局部变量遵循驼峰...

    Android核心知识.pdf

    其主要步骤包括类装载、校验、准备、解析和初始化。 - **运行时数据区**:JVM分为堆内存、栈内存、方法区、程序计数器和本地方法栈5个区域,它们各自负责存储不同类型的数据和执行信息。 - **方法指令**:JVM执行...

Global site tag (gtag.js) - Google Analytics