本文已收录至 github,完整图文:https://github.com/HanquanHq/MD-Notes

类加载机制

类加载机制,类加载的过程?

  1. class loading 加载:JVM 把描述类的数据从 Class 文件加载到内存中
  2. class linking 连接
    1. verification:校验装进来的 class 文件是否符合标准,比如 CA FE BA BE
    2. preparation:将 class 文件的静态变量赋默认值(不是初始值)
    3. resolution:把 class 文件常量池中用到的符号引用,转换为直接内存地址可以直接访问到的内容
  3. class initializing 初始化:静态变量这时候才会赋初始值
  4. 申请对象内存
  5. 成员变量赋默认值
  6. 调用构造方法
    • 成员变量按照顺序赋初始值
    • 执行构造方法语句
  7. 最终形成可以被虚拟机直接使用的 Java 类型,这个过程称为虚拟机的类加载机制。

双亲委派机制(parent 翻译不准确,应为父类委派机制)

双亲委派机制是一个递归,不同的类加载器加载不同的 class。

Bootstrap ClassLoader 启动类加载器
  • C++实现

  • 加载 <JAVA_HOME>/lib下的类,是 jdk 最核心的内容,例如 rt.jar, charset.jar

  • 加载路径:sun.boot.class.path

Extension ClassLoader 扩展类加载器
  • Java 实现

  • 加载扩展包中的类,在 jdk 安装目录 jre/lib/ext 下的 jar

  • 加载路径:java.ext.dirs

Application ClassLoader 系统类加载器
  • 我们写的代码默认就是由它来加载

  • 加载 classpath 指定的内容

  • 加载路径:java.class.path

User ClassLoader 用户自定义加载器
  • 加载自己定义的加载器

类加载器的加载过程

  1. 子类先委托父类加载
  2. 父类加载器有自己的加载范围,范围内没有找到,则不加载,并返回给子类
  3. 子类在收到父类无法加载的时候,才会自己去加载

为什么要搞双亲委派?

主要为了安全。如果任何一个 class 都可以把它 load 到内存的话,那我就可以自定义一个 java.lang.string 类,交给自定义的 ClassLoader,把这个我自己的 string 类打包给客户,它被 load 进内存,然后客户把密码存储成 String 类型对象,我偷摸把密码发给自己,这样就不安全了。

面试必会系列 - 1.4 类加载机制相关推荐

  1. 面试必会系列 - 1.6 Java 垃圾回收机制

    本文已收录至 Github(MD-Notes),若博客中有图片打不开,可以来我的 Github 仓库:https://github.com/HanquanHq/MD-Notes,涵盖了互联网大厂面试必 ...

  2. 面试必会系列 - 1.5 Java 锁机制

    本文已收录至 github,完整图文:https://github.com/HanquanHq/MD-Notes 面试必会系列专栏:https://blog.csdn.net/sinat_424833 ...

  3. 面试必会系列 - 1.7 JVM 内存模型

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

  4. 面试必会系列 - 5.3 LVS负载均衡

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

  5. 面试必会系列 - 11.1 一文读懂Maven:Maven工程类型、项目结构、工程关系、常见命令等

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

  6. 面试必会系列 - 5.2 详解OSI模型与七层协议,网络TCP/IP基础,三次握手、四次挥手等

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

  7. 面试必会系列 - 4.1 程序员必须掌握的:计算机组成、操作系统知识点汇总

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

  8. 面试必会系列 - 3.1 Redis知识点大汇总(数据类型,内存模型,持久化,缓存击穿,集群,一致性哈希等等)

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

  9. 面试必会系列 - 2.1 MySQL知识点大汇总(基本架构,存储引擎,锁,事务,索引,B+树等等)

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

最新文章

  1. ERP与EWM集成配置---ERP 端(一)
  2. 为什么创业者专注做一个产品最好?
  3. pyspark模块介绍
  4. bim 模型web页面展示_BIM+装配式建筑工程师2020年必须拿下的技能证书
  5. 循环队列的java结构_java数据结构之循环队列(数组实现)
  6. 基于Java实现的快速排序
  7. 闻乐天授江州司马 [唐] 元稹
  8. dell 服务器r410装系统,dell r410安装windows2003系统
  9. C++标准程序库读书笔记-第二章新的语言特性
  10. 计算机c语言程序设计题,《计算机C语言程序设计》模拟题集.doc
  11. ANSI SQL 定义
  12. 中国移动通信研究院笔试题2
  13. java打印堆栈信息_Java 打印堆栈的几种方法
  14. phpDesigner 工具快捷键巧用
  15. 老九课堂c语言百度云,老九学堂C语言
  16. a标签中的href=javascript
  17. C++文件读取的四种方式
  18. 掌握这些PDF转Word方法,从此你就是大神的存在
  19. 【我的Android进阶之旅】Android 混淆文件资源分类整理之二:将混淆文件拆分成更小粒度的混淆文件
  20. word自动设置表格格式

热门文章

  1. 牛客 - maki和tree(dfs)
  2. POJ - 3678 Katu Puzzle(2-SAT)
  3. HDU - 2594 Simpsons’ Hidden Talents(KMP的next数组)
  4. 甘肃农业大学计算机基础A,2021甘肃农业大学计算机基础专业研究生考试大纲
  5. python mysql链接安全_Python最佳实践和最安全的方法来连接MySQL和执行查询
  6. python2使用openpyxl_使用openpyxl for Python2.6有些困难
  7. Lua 元表(Metatable)
  8. LXC C API 使用
  9. MySQL 中存储时间的最佳实践
  10. 第四期直播分享预告-高薪offer指南