`
躁动的绵羊
  • 浏览: 95959 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

深入JVM——类型的生命周期(一)

阅读更多
类型:类的描述信息,如此类有哪些局部变量、方法以及它的父类是什么等
类型存储地址:内存中的方法区


类型的生命周期的简单描述

类型生命周期过程: 装载——>连接——>初始化——>卸载
装载:把二进制的java类型(class文件)读入到java虚拟机中
连接:把读入的类型数据合并到虚拟机运行状态中去,连接包括三个子步骤:验证、准备和解析
初始化:给类型变量赋予适当的初始值

整个过程如下图所示:
    


    下面对类的生命周期作个详细描述

    类的装载
   
    如上所说,装载即是读入二进制数据流到内存中的方法区(指定Class文件内容),并形成一定的数据结构(数据结构可理解为存储类中局部变量、方法等类属性的一种方式)。装载过程主要包括如下三个步骤:
    1.通过该类的完全限定名(全路径类名),到指定目录查找并读取对应的class文件,形成二进制数据流
    2.解析读取的二进制数据流,在方法区类形成内部数据结构.(类中局部变量、方法、父类引用存储到方法区指定地址等)
    3.创建一个该类型的java.lang.Class类的实例

补充:1). 装载通过类装载器来完成的。类装载器可以是启动类装载器,也可以是用户自定义的类装载器。
      2). 类装载器并不一定需要等到某个类首次使用时才去装载他们,JVM规范允许类装载器缓存java类的二进制表现形式,在预料某个类将要被使用时,类装载器可以预先装载它
      3). 如果一个类在被预先装载的过程中遇到问题,出现异常,如遇到缺失或错误的class文件等,在装载时,类装载器不会报告错误,只有等到程序主动使用该类是才会报告错误

   
    连接阶段
   
连接里有分为三个子步骤,即验证准备解析
    验证步骤确保了java类型数据格式的正确性,并且适合于JVM使用。不管怎样,JVM实现中的特定类型检查一般都是在特定时间发生的,也许在验证阶段前作的处理,或在验证阶段后作的处理,但在逻辑上,我们都把它们归属为验证。类装载时做的验证有以下几种(验证前的处理):
    1.比如说,在装载过程中,JVM会解析二进制数据流以构成类型特定的数据结构,在解析期间,JVM一般会检查二级制数据,以确保二进制数据的初始工作不会导致虚拟机崩溃,或检查二进制数据是否是预期格式。虽然这些检查都是在装载期间完成,是在正式连接验证之前进行,但逻辑上它们仍属于验证阶段
     2.除了Object以为,每个类都有一个超类,在装载某个类时,它必须确保该类的超类也已经被装载了。
     在大部分JVM实现中,还有一种验证往往发生在正式验证阶段之后,那就是符号引用的验证。符号引用的验证一般发生在连接的解析阶段,这时的处理大致是JVM通过保存在常量池中的符号来查找引用的类、接口、字段或方法,把符号换成直接引用。但JVM搜索到一个符号时,必须保证该符号对应的类、接口、字段或方法等必须存在。
     那具体的在连接验证阶段作哪些验证呢?首先,确保各个类之间二进制兼容的检查:
      1.检查final类不能拥有子类
      2.检查final方法不能被覆盖
      3.确保类型和超类型之间没有不兼容的方法声明(如方法名、参数相同,但返回值不同等)
 
    准备阶段负责为装载的类型分配所需的内存,比如说为类变量分配内存,设置默认初始值,如int类型变量默认初始值为0。在准备阶段,JVM实现可能为一些数据结构分配内存,目的是为了提高程序的性能,如方法表,它包含指向每一个方法的指针

     解析阶段负责把常量池中的符号引用转换为直接引用,当然,虚拟机可以推迟解析这一步,它可以在运行中程序真正使用某个符号时采取解析它


     由于篇幅太大,所以,初始化和卸载在后面篇章中描述
  • 大小: 161.9 KB
5
1
分享到:
评论
2 楼 fly_jj 2010-10-08  
感觉深挖会无法自拔。。。
1 楼 iq527 2010-10-03  

博主看完之后能导出PDF共享么? 


比自己看书要省事 ^.^

相关推荐

    深入java虚拟机(二)——类的生命周期(上)类的加载和连接1

    【深入Java虚拟机(二)——类的生命周期(上)类的加载和连接】 Java虚拟机(JVM)是Java程序的核心,它负责解释和执行Java字节码。类的生命周期在JVM中是一个关键的概念,它涵盖了从类的加载到卸载的整个过程。...

    深入java虚拟机(三)——类的生命周期(下)类的初始化1

    【深入Java虚拟机(三)——类的生命周期(下)类的初始化1】 类的生命周期在Java中是一个关键的概念,它涵盖了从加载到卸载的整个过程。在类的生命周期中,初始化阶段是非常重要的,因为它涉及到类的静态变量的赋值...

    jvmjava,java实现的JVM。.zip

    《Java实现的JVM——深入理解与实践》 在计算机科学领域,Java虚拟机(JVM)是Java语言的关键组成部分,它使得Java程序能够在不同平台上运行而无需重新编译。本项目“jvmjava”是一个开源项目,由Java语言实现,...

    深入JVM内核-原理、诊断与优化ppt.zip

    《深入JVM内核——原理、诊断与优化》是一份深度探讨Java虚拟机核心机制、问题诊断和性能优化的专业资料。这份资料涵盖了JVM的各个方面,对于Java开发者来说,理解和掌握这些知识至关重要。 首先,我们要了解JVM...

    深入JVM内核—原理、诊断与优化视频教程-4.GC算法与种类

    本教程——“深入JVM内核—原理、诊断与优化视频教程”着重讲解了JVM的内部机制,特别是关于垃圾收集(Garbage Collection, GC)的算法和种类,这对于理解和提升Java应用性能至关重要。 一、JVM内存模型 首先,...

    【JVM】类的奇幻漂流——类加载机制探秘

    在实际编程中,了解这些概念有助于我们理解和优化程序性能,尤其是在涉及类加载策略、类加载器自定义以及类的生命周期管理时。通过实例和实践,我们可以更深入地掌握这些概念,提升我们的JVM调优技能。

    java jvm-old gc耗时几十s,导致系统告警(csdn)————程序.pdf

    年轻代用于存储生命周期较短的对象,而老年代则存放生命周期较长的对象。当年轻代的空间不足时,会触发Minor GC,清理年轻代;当老年代空间不足时,就会触发Major GC或Full GC,这通常涉及整个堆的清理,包括年轻代...

    学习笔记——JVM性能调优之 jstat(csdn)————程序.pdf

    例如,如果发现年轻代的垃圾回收(YGC)次数频繁,可能意味着对象生命周期短,需要增大年轻代空间以减少对象晋升到老年代的几率;而老年代空间使用率过高则可能预示着内存溢出的风险,需要扩大老年代容量或者优化...

    JVM调优实战.doc

    对象的生命周期与鱼的生长周期相比较,JVM利用不同的内存区域——年轻代、老年代和持久代,来适应不同生命周期的对象。年轻代主要用于存放新生的对象,它由Eden和两个Survivor区组成,新生对象首先在Eden区分配内存...

    深入java虚拟机——applet 演示

    Applet的生命周期包括初始化、启动、绘画、停止和销毁五个阶段,这些阶段由JVM管理和控制。 在深入Java虚拟机的光盘中,可能包含了一系列关于JVM内部机制的文档、示例代码和演示程序,这些内容有助于开发者理解JVM...

    java基础之JVM

    JVM的设计目的是为了使Java程序能够跨平台运行——也就是说,只要目标操作系统上安装了相应的JVM,Java程序就可以在该平台上运行。 JVM的主要优点在于它的可移植性。通过在不同的平台上实现JVM,开发者只需要编写一...

    浅谈Java线程的生命周期——北大青鸟佳音旗舰.docx

    本文将深入探讨Java线程的生命周期,包括创建、启动、结束以及线程的协作和调度。 首先,创建Java线程有两种主要方式:直接实例化`Thread`类或者创建一个新的类去继承`Thread`类并重写`run()`方法。例如,你可以...

    MiniJavaVM——一个Java虚拟机的设计和实现

    总的来说,《MiniJavaVM——一个Java虚拟机的设计和实现》是一篇宝贵的教育资源,它通过实例化JVM的简化版本,使开发者能够深入理解Java程序的运行机制,掌握虚拟机设计的关键要素,从而在实际开发中更加得心应手。...

    jvm分享ppt

    【JVM 分享】——深入理解Java程序的生命周期与执行机制 Java程序的生命周期始于源码,经过编译、加载和执行,最终在Java虚拟机(JVM)上运行。这个过程涉及到了编译器、类文件、虚拟机以及相关的优化技术。下面将...

    JVM性能调优-JVM内存整理及GC回收.pdf

    老年代的对象生命周期更长,回收频率较低。 3. **永久代**:用于存储类元数据、静态变量等信息。从Java 8开始,永久代被元空间(Metaspace)取代。 #### 总结 综上所述,JVM性能调优涉及多个方面,包括理解参数传递...

    JVM笔记(阳哥).zip

    了解这个过程有助于我们理解和控制类的生命周期。 四、垃圾收集与内存优化 JVM的垃圾收集机制负责自动回收不再使用的对象所占用的内存,主要有标记-清除、复制、标记-整理和分代收集等算法。理解垃圾收集的工作...

    jvisualvm来JVM监控

    1. **内存监控**:jvisualvm可以展示堆内存的分配和使用情况,帮助我们发现内存泄漏,通过对象分配图理解对象生命周期。 2. **CPU剖析**:实时显示CPU的使用率,分析方法调用耗时,定位性能瓶颈。 3. **线程分析**:...

    JVM虚拟机源码(C++)

    - **内存管理**:对象的生命周期,包括创建、引用、垃圾回收等过程,以及不同垃圾收集器的工作原理。 - **多线程**:JVM如何实现线程的并发执行,包括线程调度、同步原语等。 - **类加载机制**:双亲委托模型、类...

    JVM性能调优-JVM内存整理及GC回收.pdf_java_jvm_

    4. **对象生命周期管理**:合理设计对象生命周期,避免大量短生命周期对象晋升到老年代,导致不必要的Full GC。 5. **类加载优化**:控制类加载机制,避免类的频繁加载和卸载,减少方法区的压力。 6. **并行与并发...

Global site tag (gtag.js) - Google Analytics