`
zhang1685701
  • 浏览: 2976 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java虚拟机之初始化

阅读更多
   类从加载到内存虚拟机内存开始,到卸载出内存为止,整个生命周期是:加载,验证,准备,解析,初始化,使用,卸载。
    加载,验证,准备,初始化,卸载。这五个阶段的顺序是固定的。类的加载过程必须按照这种过程进行,但解析就不一定了。在某些情况下可以在初始化后再开始。这是为了支持java的动态绑定。注意的是这几个阶段不是一个阶段结束了才会执行下一阶段。有可能是这一阶段执行过程中,下一阶段也开始执行了。
    java虚拟机中对加载没有进行强制约束。但对于初始化阶段有且只有一下四种情况必须立即对类进行初始化(之前的几个阶段在此之前开始)
    1,遇到new,getstatic,putstatic,和invokestatic这四条字节码指令时,如果类没有初始化,则必须进行初始化。
    2,使用java.lang.reflet包的方法对类进行调用的时候。
    3,当初始化一个类的时候,如果发现其父类没有进行初始化,则其父类要初始化。
    4,当虚拟机启动时,用户需要指定一个要执行的主类(包括main())虚拟机会先进行初始化这个类
例1:
public class SuperClass{
     static{
        System.out.println("SuperClass init");
     }
     public static int vlaue = 123;
}
public class SubClass extends SuperClass{
    static {
       System.out.println("SubClass init");
    }
}

public class NotInit{
    public static void main(String args[]){
       System.out.println(SubClass.value)
    }
}


上面只会输出“SuperClass init”
原因:对于静态字段,只有直接定义这个类才会被初始化,通过子类来引用父类中定义的静态字段,只会触发父类的初始化而不会触发子类的初始化。
例2:
public class NotInit{
    public static void main(String args[]){
       SuperClass sc = new SuperClass[10];
    }
}

没有输出“SuperClass init”。
例3:
public class ConstClass{
        static {
           System.out.println("ConstClass init")
       }
       public static final String HELLOWORLD = "hello world";
}
 public class NotInit{
      public static void main(String args[]){
       System.out.println(ConstClass.HELLOWORLD);
}
上面也不会输出“ConstClass init”
原因:虽然java源码中引用了ConstClass类中的常量HELLOWORLD但是在编译阶段将次常量的值“helloworld”存储到了NotInit类的常量池中,之后只对自己类中的常量池进行了引用。两个类在编译成class文件后就不存在任何联系了。
 
分享到:
评论

相关推荐

    Java虚拟机规范.Java SE 8版.zip

    《Java核心技术系列:Java虚拟机规范(Java SE 8版)》完整而准确地阐释了Java虚拟机各方面的细节,围绕Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而...

    深入java虚拟机加载初始化

    ### 深入Java虚拟机加载初始化 #### Classloader的作用及意义 在深入了解Java虚拟机(JVM)的加载初始化之前,我们先明确一下`Classloader`...希望本文能够帮助您更好地掌握Java虚拟机的核心机制之一:类加载初始化。

    Java虚拟机规范 Java SE 8版-带目录-pdf

    Java虚拟机规范 Java SE 8版-带目录-pdf,本书完整而准确地阐释了Java虚拟机各方面的细节,围绕Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而深入的分析...

    java虚拟机规范高清中文版本(java SE 8版本)

    第1章 :简单地介绍了Java虚拟机的历史并... 第5章:定义了Java虚拟机启动以及类和接口的加载、链接和初始化的过程; 第6章:定义了Java虚拟机指令集; 第7章:提供了一张以操作码值为索引的Java虚拟机操作码助记表。

    Java虚拟机规范中文版(JavaSE7).pdf

    加载过程包括加载、验证、准备、解析和初始化五个阶段,确保加载的类符合规范且安全。 **虚拟机指令集** Java虚拟机指令集是虚拟机执行的基本操作单元,每条指令对应一个特定的操作,如加载和存储变量、算术运算、...

    java虚拟机规范(java SE7)

    java虚拟机规范,高清PDF版本,含有目录结构:第一章:引言; 第二章:java虚拟结构(运行时区域内存:寄存器,java虚拟机栈,java堆,方法去,运行时常量池,本地方法栈);... 第五章:加载、链接与初始化

    Java虚拟机规范.Java SE 8版

    《Java核心技术系列:Java虚拟机规范(Java SE 8版)...第5章定义Java虚拟机启动以及类与接口的加载、链接和初始化过程;第6章阐释并列举Java虚拟机指令集;第7章提供一张以操作码值为索引的Java虚拟机操作码助记符表。

    java虚拟机各种版本

    Java虚拟机的运行过程包括加载、验证、准备、解析、初始化等阶段,其中最重要的是解释器和JIT(Just-In-Time)编译器。解释器将字节码逐行解释执行,而JIT编译器会在运行时将热点代码编译成机器码,以提高运行效率。...

    java虚拟机

    Java虚拟机(JVM,Java Virtual Machine)是Java平台的核心组成部分,它负责执行Java程序,为Java代码提供了跨平台的运行环境。Java虚拟机的概念始于Sun Microsystems,现在由Oracle公司继续发展和维护。JVM的设计...

    Java虚拟机规范(中文版) Java SE 7

    这些区域在Java虚拟机启动时会被初始化,并且有着各自特定的用途和生命周期。 - **类文件格式**:Java虚拟机执行的是字节码,而这些字节码存储在.class文件中。规范详细定义了.class文件的格式,包括常量池、字段表...

    Java虚拟机规范 (Java SE 7 中文版)

    《Java虚拟机规范(Java SE7版)》由林德霍尔姆著,本书完整而准确地阐释了Java虚拟机各方面的细节,围绕.Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而...

    Java虚拟机规范(第8版).pdf

    本书完整而准确地阐释了Java虚拟机各方面的细节,围绕Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而深入的分析,深刻揭示Java虚拟机的工作原理。...

    Java虚拟机规范(Java SE 7)中文版

    《Java虚拟机规范(Java SE 7版)》是Java领域最...第5章定义了Java虚拟机启动以及类和接口的加载、链接和初始化过程。第6章阐释并列举了Java虚拟机指令集。第7章提供了一张以操作码值为索引的Java虚拟机操作码助记符表。

    java虚拟机规范

    《Java虚拟机规范(Java SE 8版)英文版》全面而准确地阐释了Java虚拟机各方面的细节,围绕Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而深入的分析,...

    java虚拟机规范 jdk8.

     《Java核心技术系列:Java虚拟机规范(Java SE 8版)》完整而准确地阐释了Java虚拟机各方面的细节,围绕Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而...

    java虚拟机的详细原理

    1. **类加载子系统**(Class Loader Subsystem):负责将Java类加载到内存中,并对它们进行验证、解析和初始化。每个Java应用程序都有一个类加载器子系统,该子系统包括: - **引导类加载器**(Bootstrap Class ...

    Java虚拟机规范SE8英文

    ### Java虚拟机规范SE8知识点概述 #### 一、引言 - **历史背景**:Java虚拟机(JVM)自1995年首次发布以来,已经发展成为支持多种编程语言的重要平台。 - **Java虚拟机定义**:Java虚拟机(JVM)是一种能够执行Java...

    Java虚拟机精讲.高翔龙.带书签完整版.pdf

    本书以极其精练的语句诠释了HotSpot VM 的方方面面,比如:字节码的编译原理、字节码的内部组成结构、通过源码的方式剖析HotSpot VM 的启动过程和初始化过程、Java 虚拟机的运行时内存、垃圾收集算法、垃圾收集器...

Global site tag (gtag.js) - Google Analytics