第22讲心得

该讲介绍了类加载过程,什么是双亲委派模型?。

  1. 一般来说,我们把 Java 的类加载过程分为三个主要步骤:加载、链接、初始化,具体行为在Java 虚拟机规范里有非常详细的定义。首先是加载阶段(Loading),它是 Java 将字节码数据从不同的数据源读取到 JVM 中,并映射为 JVM 认可的数据结构(Class 对象),这里的数据源可能是各种各样的形态,如 jar 文件、class 文件,甚至是网络数据源等;如果输入数据不是 ClassFile 的结构,则会抛出 ClassFormatError。加载阶段是用户参与的阶段,我们可以自定义类加载器,去实现自己的类加载过程。第二阶段是链接(Linking),这是核心的步骤,简单说是把原始的类定义信息平滑地转化入 JVM 运行的过程中。这里可进一步细分为三个步骤:验证(Verification),这是虚拟机安全的重要保障,JVM 需要核验字节信息是符合 Java 虚拟机规范的,否则就被认为是 VerifyError,这样就防止了恶意信息或者不合规的信息危害 JVM 的运行,验证阶段有可能触发更多 class 的加载。准备(Preparation),创建类或接口中的静态变量,并初始化静态变量的初始值。但这里的“初始化”和下面的显式初始化阶段是有区别的,侧重点在于分配所需要的内存空间,不会去执行更进一步的 JVM 指令。解析(Resolution),在这一步会将常量池中的符号引用(symbolic reference)替换为直接引用。在Java 虚拟机规范中,详细介绍了类、接口、方法和字段等各个方面的解析。最后是初始化阶段(initialization),这一步真正去执行类初始化的代码逻辑,包括静态字段赋值的动作,以及执行类定义中的静态初始化块内的逻辑,编译器在编译阶段就会把这部分逻辑整理好,父类型的初始化逻辑优先于当前类型的逻辑。
  2. 加载机制有三个基本特征:双亲委派模型。但不是所有类加载都遵守这个模型,有的时候,启动类加载器所加载的类型,是可能要加载用户代码的,比如 JDK 内部的 ServiceProvider/ServiceLoader机制,用户可以在标准 API 框架上,提供自己的实现,JDK 也需要提供些默认的参考实现。 例如,Java 中 JNDI、JDBC、文件系统、Cipher 等很多方面,都是利用的这种机制,这种情况就不会用双亲委派模型去加载,而是利用所谓的上下文加载器。可见性,子类加载器可以访问父加载器加载的类型,但是反过来是不允许的,不然,因为缺少必要的隔离,我们就没有办法利用类加载器去实现容器的逻辑。单一性,由于父加载器的类型对于子加载器是可见的,所以父加载器中加载过的类型,就不会在子加载器中重复加载。但是注意,类加载器“邻居”间,同一类型仍然可以被加载多次,因为互相并不可见。

《Java核心技术面试精讲》23讲学习总结相关推荐

  1. 《Java核心技术面试精讲--杨晓峰》学习笔记目录

    这仅仅是我个人的理解,想要仔细了解请去 极客时间 购买阅读 笔记会写的很多,也是一个夯实基础的过程吧 笔记的内容大部分是从专栏以及留言区摘录 10 11 12 中涉及到的 IO 与 NIO 知识点我许 ...

  2. java核心技术面试精讲

    前言 大厂面试真题向来都是各大求职者的最佳练兵场,而今天小编带来的便是"HUAWEI"面经!这是一次真实的面试经历,虽然不是我自己亲身经历但是听当事人叙述后便会深有同感(因为我朋友 ...

  3. 《Java 核心技术面试》课程笔记(十)

    如何保证集合是线程安全的? 典型回答 Java 提供了不同层⾯的线程安全支持. 在传统集合框架内部,除了 Hashtable 等同步容器,还提供了所谓的同步包装器(Synchronized Wrapp ...

  4. 《Java 核心技术面试》课程笔记(十一)

    Java 提供了哪些 IO 方式? 典型回答 Java IO 基于不同的 IO 抽象模型和交互方式,可以分为: BIO,传统的 java.io 包,它基于流模型实现. 提供了我们最熟知的⼀些 IO 功 ...

  5. 2023最新Java核心技术面试助你跳槽,涨薪50w!

    J 1.OSI 七层网络模型,你了解吗?具体功能有哪些? 网络的七层架构从下到上主要包括物理层.数据链路层.网络层.传输层.会话层.表示层和应用层: 物理层:主要定义物理设备标准,它的主要作用是传输比 ...

  6. 杨晓峰-java核心技术36讲(学习笔记)- 第1讲 | 谈谈你对Java平台的理解?

    杨晓峰-java核心技术36讲(学习笔记) 接下来我会分享杨晓峰-java核心技术36讲的学习笔记,内容较多,补充了其中一些牛人评论,相对详细(仅供个人学习记录整理,希望大家支持正版:https:// ...

  7. java核心技术精讲-李兴华-专题视频课程

    java核心技术精讲-101993人已学习 课程介绍         本课程主要读者全面细致的讲解Java编程的所有核心知识,从基础语法.到面向对象以及Java的实际应用进行完整讲解.官方QQ群:61 ...

  8. java基础:Java七大外企经典面试精讲视频

    java基础:Java七大外企经典面试精讲视频 对于很多应聘java程序员的求职者来说,全面掌握java面试技巧,确实是自己找到一个好工作的敲门砖.今天小编在这里给大家分享一个关于java基础的Jav ...

  9. 【总结】Java核心技术36讲知识点大纲(转载)

    Java核心技术36讲知识点总结大纲 1 Java平台的理解 Java的特性,解释运行和编译运行 2 Exception 和 Error 有什么区别 理解Java的异常体系的设计,Throwable ...

最新文章

  1. 逆矩阵 与行列式的关系
  2. 改变,从跨出第一步開始——记海大ITAEM团队首次IT讲座掠影
  3. 源码解读 Spring Boot Profiles
  4. python在财务上的应用-python 与财务
  5. 配置文件~/.ssh/config和/etc/ssh/ssh_config
  6. 数据库迁移之从oracle 到 MySQL
  7. Css的filter常用濾波器屬性及語句大全
  8. python 运行时间 装饰器_python 装饰器统计某个函数的运行时间
  9. .NET 4.0 调用 C dll 触发 AccessViolationException 异常的处理方案
  10. 物联网-移远M26模块OpenCPU开发第1讲
  11. nginx配置SSL实现服务器/客户端双向认证
  12. C# 支付宝小程序 ---小程序支付
  13. Jenkins Pipeline声明式流水线
  14. 不要使用Python开发大型项目!
  15. 【算法】常见数据结构基本算法整理
  16. JavaWeb(华清远见)
  17. MySQL复制跳过错误--slave_skip_errors、sql_slave_skip_counter、slave_exec_mode
  18. 艾伟:WCF从理论到实践(3):八号当铺之黑色契约
  19. 德州扑克比牌、认牌功能实现作业
  20. 拜托,面试请不要再问我 Spring Cloud Alibaba 底层原理

热门文章

  1. pandas.fillna()函数
  2. 关于2022年度金山区软件奖励拟支持企业名单的公示
  3. 运营商的“100Mbps”非网速100Mb/s
  4. 编程语言python入门书-TIOBE编程语言排行榜前20的语言入门书籍推荐
  5. 2020届硕士生年初Android春招实习面试和正式校招面试经验汇总(收割腾讯,百度,美团,网易等offer)
  6. idea往项目中添加jar包
  7. linux运行国服英雄联盟排行榜,《英雄联盟》国服服务器官方排名情况怎么样 国服服务器官方排名分析...
  8. 打印机扫描功能怎么用
  9. javascript-字符串函数-指定位置字符-位置查找-字符串替换-字符串分割
  10. js字符串替换replace