• JVM笔记——类加载


    1.在java代码中,类型(如class enum interface)的加载、连接、初始化过程都是在程序运行期完成的。这个特性,使得本为静态语言的java,拥有了动态语言的某些特征

    加载:查找并加载类的二进制数据

            类的加载指的是将类的.calss文件中的二进制数据读入内存,将其放置在运行时数据区的方法区内,然后创建一个java.lang.Class对象(规范没说明这个Class对象要放在哪里,HotSpot虚拟机将其放在了方法区内),用来封装类在方法区内的数据结构。

    ps:一个类的所有实例,均对应一个Class对象,就是这里生成的,类加载其实加载的就是这里生成的Class对象

    连接:梳理类与类之间的调用,把符号引用转为真正的引用,并且校验字节码的正确性等,具体功能:

        a.验证:确保被加载类的正确性

        b.准备:为类的静态变量分配内存,并且将其初始化为 默认值

        c.解析:把类中的符号引用转为直接引用

    初始化:为类的静态成员变量赋予正确的初始值

    ps:另外2阶段

    使用:

    卸载:把类从内存中去掉,卸载之后,该类不能再被使用,但是可以重新加载后再使用(使用不多,OSGI在使用)


    2.java里的类从硬盘加载到内存中,是由类加载器来完成的


    3.java虚拟机在以下情况将结束生命周期

    (1)执行了System.exit()方法

    (2)程序正常结束了

    (3)程序在执行的过程中遇到异常或者错误,导致异常终止

    (4)由于底层操作系统错误导致异常终止


    4.对类的使用方式分为:主动使用、被动使用

    详细介绍见 http://blog.csdn.net/mweibiao/article/details/79516708



  • 相关阅读:
    内存
    TCP/IP
    安装
    linux常用命令
    linux文本处理三剑客之 grep
    tail命令:显示文件结尾的内容
    less命令:查看文件内容
    head命令:显示文件开头内容
    改进Zhang Suen细化算法的C#实现
    【转】在VS2010上使用C#调用非托管C++生成的DLL文件(图文讲解)
  • 原文地址:https://www.cnblogs.com/billmiao/p/9872227.html
Copyright © 2020-2023  润新知