zoukankan      html  css  js  c++  java
  • 《深入理解jvm》笔记---第七章

    虚拟机类载入机制

    1. 类的生命周期:

      载入、验证、准备、解析、初始化、使用、卸载七个阶段。当中验证、准备、解析三个阶段统称为连接。


    当中,解析的阶段的时机并不一定。

    2. Java类载入的时机:

     Java类载入的时机Java虚拟机规范并没有强调,可是对于初始化阶段,虚拟机规范则严格限定了有且仅仅有5种情况必须马上对类进行初始化:



    这五种场景的行为称为对一个类进行主动引用。

    3. 类载入的过程:

      ①载入:在载入阶段。虚拟机须要做一下三件事情:


    ②验证:验证的目的是为了确保Class文件的字节流中包括的信息符合当前虚拟机的要求,而且不会危害虚拟机自身的安全。

    主要包括:

     ⑴




    ⑶字节码验证:字节码验证是整个验证过程最复杂的阶段,主要目的是通过对数据流和控制流的分析,确定程序语义是否是合法的、符合逻辑的。


    ③准备:

      准备阶段是给类变量分配内存并设置类变量初始值的阶段。这些变量使用的内存都将在方法区中进行分配。首先须要强调的是。这时候进行内存分配的仅仅有类变量(静态变量),不包含实例变量。

    其次。这里所说的初始值“通常情况”下是该类型数据的零值,如果一个类变量定义为:public static int value=123; ,那么value在准备阶段后的值是0而不是123,把value赋值为123是在类构造器<cinit>()方法中才開始做的,也就是在初始化阶段才開始运行。基本数据类型的零值例如以下:



    ④解析:解析阶段是把常量池内的符号引用替换为直接引用的过程。

    ⑤初始化:初始化是类载入过程的最后一个阶段,初始化阶段是运行类构造器<cinit>()方法的过程。


     




  • 相关阅读:
    POJ 2828 Buy Tickets (线段树 单点更新 变形)
    HDU 1754 I Hate It (线段树 单点更新)
    HDU 1166 敌兵布阵 (线段树 单点更新)
    sdut 2934 人活着系列之平方数 (完全背包变形)
    Codeforces Round #259 (Div. 2) C
    poj 1724 ROADS (bfs+优先队列)
    hdu 4901 The Romantic Hero (dp)
    MemSQL Start[c]UP 2.0
    BestCoder Round #2 1001 (简单处理)
    tc 2014 college tour 250 500
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/8279863.html
Copyright © 2011-2022 走看看