博客
关于我
虚拟机类加载机制
阅读量:492 次
发布时间:2019-03-07

本文共 807 字,大约阅读时间需要 2 分钟。

Java类加载机制是Java运行时环境(JVM)的一项核心功能,将描述类的二进制数据从文件系统读取到内存中,并对其进行校验、解析和初始化,最终生成可以直接运行的Java类型。这一机制强加了Java程序的性能和安全性。

JVM在加载Class文件时,主要依赖类加载器。类加载器负责根据全类名获取对应的二进制数据。常见的类加载器包括:

  • 启动类加载器(Bootstrap ClassLoader):负责加载JAVA_HOME/lib目录下的类和JAR文件,起始点是JVM的基础。
  • 扩展类加载器(Extension ClassLoader):加载JRE_HOME/lib/ext目录下的类和JAR文件,或通过系统环境变量指定的路径。
  • 系统类加载器(System ClassLoader):基于CLASSPATH读取用户指定的类路径,负责标准应用程序的类的加载。
  • 用户自定义类加载器:通过继承ClassLoader类实现,可以根据需求自定义加载策略。
  • 类加载过程分为四阶段进行:

  • 加载:通过全类名获取.class文件,读取并解析为二进制数据。
  • 验证:确保 InputStream中的字节流确实代表了有效的Java类文件格式。
  • 准备:为静态变量分配内存空间,并设置初始值。静态变量存储在field_info表中。
  • 解析:将常量池中的符号引用转换为直接内存地址,便于虚拟机使用。
  • 初始化:执行类构造器方法,初始化静态字段和变量,确保类和其成员的正确性。
  • 特殊情况下,用户可能需要显式加载类,通过Class.forName或继承ClassLoader实现自定义加载器。双亲委派机制确保了类加载的唯一性和安全性,防止核心类库被篡改。

    卸载阶段处理不再使用的类,依据三个条件:实例不存在,引用已消失,类加载器实例GC。JVM secondo可以回收这些类,但自定义加载器加载的类可能面临卸载风险。理解这些机制有助于优化性能和内存使用。

    转载地址:http://ruacz.baihongyu.com/

    你可能感兴趣的文章
    SpringBoot+Vue+Redis前后端分离家具商城平台系统(源码+论文初稿直接运行《精品毕设》)15主要设计:用户登录、注册、商城分类、商品浏览、查看、购物车、订单、支付、以及后台的管理
    查看>>
    pandas :to_excel() float_format
    查看>>
    pandas :加入有条件的数据框
    查看>>
    pandas :将多列汇总为一列,没有最后一列
    查看>>
    pandas :将时间戳转换为 datetime.date
    查看>>
    pandas :将行取消堆叠到新列中
    查看>>
    pandas :设置编号.最大行数
    查看>>
    pandas DataFrame 中的自定义浮点格式
    查看>>
    Pandas DataFrame 的 describe()方法详解-ChatGPT4o作答
    查看>>
    Pandas DataFrame中删除列级的方法链接解决方案
    查看>>
    Pandas DataFrame中的列从浮点数输出到货币(负值)
    查看>>
    Pandas DataFrame中的列从浮点数输出到货币(负值)
    查看>>
    Pandas DataFrame多索引透视表-删除空头和轴行
    查看>>
    pandas DataFrame的一些操作
    查看>>
    Pandas Dataframe的日志文件
    查看>>
    Pandas df.iterrows() 并行化
    查看>>
    Pandas drop_duplicates 方法不适用于包含列表的数据框
    查看>>
    pandas groupby 和过滤器
    查看>>
    pandas GROUPBY+变换和多列
    查看>>
    pandas Groupby:创建两列的Groupby时,如何按正确的顺序对工作日进行排序?
    查看>>