编译(二):ClassLoader、JIT、AOT、Linker

编译(一):基础知识

编译(二):ClassLoader、JIT、AOT、Linker

编译(三):class、dex、so 编译流程


Java ClassLoader

启动类加载器(Bootstrap ClassLoader):

  • 使用C++实现(仅限于HotSpot),是虚拟机自身的一部分。
  • 主要负责加载Java核心类库,%JRE_HOME%\lib下的rt.jar、resources.jar、charsets.jar和class等。
  • 其无法被Java程序直接引用。像String,Integer,Double类都是由引导类加载器加载的

扩展类加载器(Extention ClassLoader):

  • 一般使用Java实现的,独立于虚拟机的外部,由sun.misc.Launcher$ExtClassLoader实现
  • 负责加载Java的扩展类库,主要负责加载目录%JRE_HOME%\lib\ext目录下的jar包和class文件。
  • 开发者可直接使用扩展类加载器

应用程序类加载器(Application ClassLoader):

  • 使用java实现。负责加载应用程序(ClassPath)目录下的所有jar和class文件。
  • 开发者可通过ClassLoader.getSystemClassLoader()方法直接获取
  • 由sun.misc.Launcher$AppClassLoader实现

用户自定义的类加载器(User ClassLoader):

  • 用户自定义的类加载器,可加载指定路径的class文件

Android ClassLoader

URLClassLoader:

  • 只能用于加载jar文件,但是由于 dalvik 不能直接识别jar,所以在 Android 中无法使用这个加载器。

PathClassLoader:

  • 继承于BaseDexClassLoader,封装了一下构造函数, 默认 optimizedDirectory=null。主要用于系统和app的类加载器
  • 它只能加载已经安装的apk。因为 PathClassLoader 只会去读取 /data/dalvik-cache 目录下的 dex 文件。例如我们安装一个包名为com.hujiang.xxx的 apk,那么当 apk 安装过程中,就会在/data/dalvik-cache目录下生产一个名为data@app@com.hujiang.xxx-1.apk@classes.dex的 ODEX 文件。在使用 PathClassLoader 加载 apk 时,它就会去这个文件夹中找相应的 ODEX 文件,如果 apk 没有安装,自然会报ClassNotFoundException。

DexClassLoader:

  • 简单地封装了BaseDexClassLoader对象,并没有覆写父类的任何方法
  • 可用于执行动态加载,但必须是app私有可写目录来缓存odex文件

AOT(Ahead Of Time)和JIT(Just In Time)

JIT的运行流程:

  • 用户运行应用,而这随后就会触发 ART 加载 .dex 文件。
    • 如果有 .oat 文件(即 .dex 文件的 AOT 二进制文件),则 ART 会直接使用该文件。虽然 .oat 文件会定期生成,但文件中不一定会包含经过编译的代码(即 AOT 二进制文件)。
    • 如果没有 .oat 文件,则 ART 会通过 JIT 或解释器执行 .dex 文件。如果有 .oat 文件,ART 将一律使用这类文件。否则,它将在内存中使用并解压 APK 文件,从而得到 .dex 文件,但是这会导致消耗大量内存(相当于 dex 文件的大小)。
  • 针对任何未根据speed编译过滤器编译的应用启用JIT(也就是说,要尽可能多地编译应用中的代码)。
  • 将 JIT 配置文件数据转存到只限应用访问的系统目录内的文件中。
  • AOT 编译 (dex2oat) 守护进程通过解析该文件来推进其编译。

AOT(Ahead Of Time)和JIT(Just In Time)配合:

  • 最初在安装应用程序的时候不执行任何AOT编译。应用程序运行的前几次都将使用解释模式,并且经常执行的方法将被JIT编译。
  • 当设备处于空闲状态IDLE并正在充电时Charging,编译守护进程会根据第一次运行期间存储在 jit code cache 中并生成的Profile文件对常用代码运行AOT编译。
  • 应用程序的下一次重新启动将使用Profile文件引导的代码,并避免在运行时为已编译的方法进行JIT编译。在新运行期间得到JIT编译的方法将被添加到Profile文件中,然后被编译守护进程使用。
Linker
  • linker 在加载 ELF 时的最主要工作是 relocation(重定位),这个过程的目的是为当前 ELF 的每个“导入符号”找到对应的外部符号(函数或数据)的绝对地址。
  • .got.plt:保存外部函数的绝对地址。这就是我们经常会听到的 “GOT 表”。
  • .rel.plt,.rela.plt:用于关联 .dynsym 和 .got.plt。这就是我们经常会听到的 “PLT 表”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1168222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

投稿不再踩雷!虎贲等考 AI 解锁期刊论文 “录用加速器” 模式

核心期刊拒稿信堆积如山?查重率超标反复修改?AI 生成痕迹明显被打回?作为深耕学术写作科普的博主,后台每天都能收到科研人关于期刊论文投稿的吐槽。想写出一篇符合期刊规范、兼具学术深度的论文,不仅要攻克选题、论证、…

Python Web 开发进阶实战:无障碍深度集成 —— 构建真正包容的 Flask + Vue 应用

第一章:为什么无障碍至关重要? 1.1 用户规模与法律风险 全球残障人士:超 13 亿人(WHO),占人口 16%中国视障用户:超 1700 万,听障用户 2700 万法律合规: 欧盟 EN 301 54…

告别查重焦虑!虎贲等考 AI 降重降 AIGC:给论文注入 “人工原创灵魂”

毕业季的论文战场,查重率超标、AIGC 痕迹明显堪称两大 “致命雷区”。不少同学辛苦写完的论文,要么因重复率居高不下反复修改,要么因 AI 生成痕迹过重被打回重写。更让人崩溃的是,传统降重工具的 “同义词替换” 套路,…

2026必备!本科生必看8款一键生成论文工具深度测评

2026必备!本科生必看8款一键生成论文工具深度测评 2026年本科生论文写作工具测评:从功能到体验的深度解析 随着人工智能技术的不断进步,越来越多的学术辅助工具进入高校师生的视野。对于本科生而言,论文写作不仅是学业的重要组成部…

告别熬夜改 PPT!虎贲等考 AI PPT:一键生成学术范答辩神器

还在为答辩 PPT 熬到凌晨三点?把论文大段文字复制粘贴,结果被导师批 “逻辑混乱像流水账”?精心选的花里胡哨模板,反而让评审专家抓不住研究重点? 学术 PPT 制作,从来不是简单的文字搬运和图片拼凑&#x…

告别命令行!OpenWebUI+cpolar 让本地 AI 模型走到哪用到哪

OpenWebUI 是一款适配多系统的开源 AI 管理工具,核心功能是把本地 AI 模型的命令行操作转化为可视化聊天界面,既能管理 Ollama 本地模型,也能对接 OpenAI 兼容的云端 API,还支持知识库、多用户管理等实用功能,设计师、…

告别命令行!OpenWebUI+cpolar 让本地 AI 模型走到哪用到哪

OpenWebUI 是一款适配多系统的开源 AI 管理工具,核心功能是把本地 AI 模型的命令行操作转化为可视化聊天界面,既能管理 Ollama 本地模型,也能对接 OpenAI 兼容的云端 API,还支持知识库、多用户管理等实用功能,设计师、…

北京IPD咨询机构有哪些?一份务实的选择指南

在创新驱动发展的时代背景下,集成产品开发(IPD)作为一种先进的研发管理模式,正受到越来越多企业的重视。北京作为科技创新高地,众多企业寻求通过导入IPD提升研发效率和产品成功率。那么,北京地区的IPD咨询机…

python协同过滤算法网上书籍销售商城系统 Java书城系统

目录协同过滤算法在书城系统中的应用系统实现与优化性能与扩展性关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!协同过滤算法在书城系统中的应用 Python和Java书城系统通过协同过滤…

收藏级|大模型技术路径全景梳理(从入门到进阶)

本文系统梳理大模型从20世纪50年代符号主义萌芽,到2025年多模态智能体成熟的完整技术演进脉络,重点拆解Transformer架构、预训练范式、规模涌现效应、RLHF对齐技术等核心突破点,深入剖析当前行业面临的效率瓶颈、能力边界与安全伦理难题&…

大模型重塑本体工程和知识图谱构建综述:从静态规则驱动到动态生成范式的革命性演进

LLM-Empowered Knowledge Graph Construction: A Survey摘要本文系统综述了大语言模型(LLM)驱动的知识图谱构建最新进展,深入分析LLM如何重塑传统本体工程、知识抽取和知识融合三大核心环节。文章对比了基于模式和无模式两种范式,…

基于django框架和python的农村综合风貌展示平台

目录农村综合风貌展示平台的设计与实现核心功能模块设计关键技术实现方案应用价值与创新点关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!农村综合风貌展示平台的设计与实现 该平台…

导入网购订单数据,分类统计服饰,食品,家居类的消费金额,输出最省钱的消费品类。

为你完整设计一个网购订单消费分析系统,结合大数据与智能管理课程的思想,从场景到代码、从模块到文档,全部覆盖。1. 实际应用场景 & 痛点引入场景你是一名经常网购的用户,电商平台会记录你的每一笔订单(商品类别、…

基于django框架和python的农村老人个人信息管理系统

目录农村老人个人信息管理系统摘要关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!农村老人个人信息管理系统摘要 该系统基于Django框架与Python开发,旨在解决农村地区老…

MySQL 8查询性能优化:从底层原理到实战落地的超详细指南

在数据库领域,MySQL查询性能是决定应用响应速度的核心因素——不少开发者和DBA面对慢查询时,要么盲目加索引,要么调参无头绪,最终陷入“越优化越慢”的困境。 一、优化前置:精准定位瓶颈(数据驱动工具实操&…

书匠策AI:文献综述写作的“时空折叠器”,开启学术新视界

在学术研究的浩瀚宇宙中,文献综述如同一座桥梁,连接着过去与未来,让研究者能够站在巨人的肩膀上眺望远方。然而,面对堆积如山的文献,如何高效、准确地构建起这座桥梁,成了许多学者和学生心中的难题。别担心…

基于django框架和python的的云笔记分享管理系统

目录基于Django框架与Python的云笔记分享管理系统关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!基于Django框架与Python的云笔记分享管理系统 该系统采用Django框架与Python语言开…

伪装成“DocuSign”的钓鱼邮件席卷法律界:一场针对信任链的精准打击

佛罗里达州律师协会(The Florida Bar)官网发布紧急警报:一批高度仿真的网络钓鱼邮件正以“DocuSign文件待签署”为诱饵,大规模投递给该州注册律师及法律从业者。这些邮件看似来自权威机构,实则暗藏玄机——一旦点击链接…

从“文献迷宫”到“知识地图”:书匠策AI如何重塑你的综述思维

在学术写作的宇宙中,文献综述常常是最令人望而生畏的星系。许多研究者,无论是初入学术之门的研究生,还是经验丰富的学者,都曾在这片“文献迷宫”中迷失方向:面对海量文献不知如何筛选,梳理脉络时难以把握关…

你的电脑“原生盾牌”挡不住钓鱼攻击?英美测试敲响警钟,中国专家呼吁构建动态防御新范式

一场由英国消费者权益组织 Which? 发起的网络安全测试,意外揭开了全球主流操作系统在反钓鱼能力上的“遮羞布”。测试显示,无论是 Windows 11 自带的 Defender 防护体系,还是 macOS 内置的安全机制,在面对新型、短生命周期的钓鱼…