Mr He

If not me,who? If not now,when?

Java 虚拟机第一部分

18 Apr 2015 » java

Java程序执行过程:Java虚拟机运行并开启一个线程->使用classloader加载class文件到内存->连接->执行

Java虚拟机结束生命周期可能情况

  • 执行System.exit()方法
  • 程序正常执行结束
  • 程序在执行过程中遇到错误或异常而异常终止
  • 操作系统出现错误而导致Java虚拟机进程终止

    类的加载、连接与初始化

45413866_1.jpg

  • 加载:将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区的数据结构。
  • 连接:
    • 验证:确保被加载的类的正确性(符合Java对字节码的规定)
    • 准备:为类的静态变量分配内存,并将其初始化为默认值(int是0等)
    • 解析:把类的符号引用转换为直接引用
  • 初始化:为类的静态变量赋予正确的初始值(用户为其赋的值)

Java对类的使用可以分为两种

  • 主动使用
  • 被动使用

所有Java虚拟机实现必须在每个类或接口被Java程序“首次主动使用”时才初始化他们

主动使用:

  • 创建类的实例
  • 访问某个类的或接口的静态变量,或者对该静态变量赋值
  • 调用类的静态方法
  • 反射
  • 初始化一个类的子类
  • Java虚拟机启动时被标明为启动类的类

Related Posts