zoukankan      html  css  js  c++  java
  • JVM加载class文件的一些理解

    Java是一种动态解释型语言,类(class)只有被加载到JVM中后才能运行。每当一个Java程序运行时,都会有一个对应的JVM实例,只有当程序运行结束后,这个JVM才会退出。JVM实例通过调用类的main()方法来启动一个Java程序。当运行指定程序时,JVM将编译生成的.class文件按照需求和一定的规则加载到内存中,组织成一个完整的Java应用程序。
    类的加载方式分为隐式加载和显式加载,隐式加载指的是程序在使用new等方式创建对象时,会隐式地调用类的加载器把对应的类加载到JVM中。显示加载指的是通过直接调用class.forName()方法来把所需的类加载到JVM中。
    类的加载的主要步骤分为如下3步:
    (1)装载,根据查找路径找到对应的class文件,然后导入
    (2)链接,可以分为3小步:
    a.检查,检查待加载的class文件的正确性
    b.准备,给类中的静态变量分配存储空间
    c.解析,将符号引用转换成直接引用
    (3)初始化,对静态变量和静态代码块执行初始化工作
    补充:对于将符号引用转换成直接引用:
    在java中,一个java类将会编译成一个class文件。在编译时,java类并不知道引用类的实际内存地址,雅思报名因此只能使用符号引用来代替。比如org.simple.People类引用org.simple.Tool类,在编译时People类并不知道Tool类的实际内存地址,因此只能使用符号org.simple.Tool(假设)来表示Tool类的地址。而在类装载器装载People类时,此时可以通过虚拟机获取Tool类 的实际内存地址,因此便可以既将符号org.simple.Tool替换为Tool类的实际内存地址,及直接引用地址。

  • 相关阅读:
    setsid
    dup
    信号量
    linux标准输入输出
    linux守护进程范例
    c++字符串操作
    浏览器缓存
    bfc
    苹果手机自制铃声
    vue-cli 源码解读
  • 原文地址:https://www.cnblogs.com/zhangyanran/p/10037568.html
Copyright © 2011-2022 走看看