• 笔记:深入理解JVM 第三部分 虚拟机执行子系统 (第6、7、8、9章)


    一、第6章 类文件结构

    1、Class类文件结构

    结构:二进制流

    魔数:0xCAFEBABE

    1.7.0的版本号:50.0

    内容:常量池、访问标志、类索引、父类索引、接口索引集合、字段表集合、方法表集合、属性表集合、

    2、字节码指令

    分类:加载和存储指令、运算指令、类型转换指令、对象创建和访问指令、操作数栈管理指令、控制转移指令、方法调用和返回指令、异常处理指令、同步指令


    二、第7章 类加载机制

    1、初始化时机

    (1)、new 一个对象,调用静态字段或方法

    (2)、反射

    (3)、初始化子类

    (4)、JVM启动类

    (5)、1.7中的动态语言


    不会初始化时机:

    (1)、使用编译时常量 (final static 变量)

    (2)、使用父类的静态变量或方法,不初始化子类

    (3)、创建一个数组:

    MyClass[]  clazzes = new  MyClass[10] ;

    以上语句不会初始化。

    (4)、初始化类不会初始化其实现的接口


    2、类加载的过程

    加载的例子:

    (1)、从JAR、WAR、ZIP 等包读取

    (3)、从网络中读取

    (4)、动态代理、CGLIB等生成类

    (5)、JSP 生成Class类

    (6)、数据库中读取


    3、类加载器

    双亲委派模型:

    Bootstrap ClassLoader:加载 /lib 下类

    Extension ClassLoader:加载 /lib/ext 下类

    Application ClassLoader:加载 classpath下类


    破坏双亲委派模型:
    (1)、JNDI服务的线程上下文类加载器:通过java.lang.Thread.setContextClassLoader() 设置ClassLoader,绕过双亲委派模型。
    (2)、热部署:OSGi中的类加载器,不在是双亲委派,而是网状结构。


    三、第8章 字节码执行引擎

    1、运行时栈帧结构

    包括:局部变量表、操作数栈、动态连接、方法返回地址、附加信息


    2、方法调用

    包括:解析、分派、、动态语言支持


    3、基于栈的字节码解释执行引擎


    四、第9章 类加载和执行案例

    1、Tomcat的类加载器

    类库目录划分:

    /common :可被Tomcat 和 所有Web应用共同使用

    /server :只能被Tomcat 使用,所有Web应用的不可以使用

    /shared:Tomcat不可以,所有Web应用都可以使用

    /deploy/myApp/Web-INF:Tomcat不可以,myAPP私有,其余web应用不可以



    2、OSGi  (Open Service Gateway Initiative) 灵活的类加载器架构

    类加载器不再是双亲委派模型的树形结构,而是复杂的网状结构

    优点:(1)、更精确的模块划分和可见性控制。

    (2)、模块热插拔,程序升级更新、调试除错,可以只停用程序中的一部分,而非全部。


    缺点:

    (1)、类加载器的网状结构容易造成死锁

    (2)、容易造成内存泄露

    3、字节码生成技术

    动态代理、CGLib、AOP 等

    4、Retrotranslator

    可将新版本的代码回退为老版本。





  • 相关阅读:
    Word操作技巧
    x264命令行参数解释
    [翻译]TCP穿透NAT技术
    VC6随身笔记
    如何开启 Windows 2000 Server 上的远程桌面功能
    MFC基础知识整理
    用Windows Media编码器建网络电视直播站
    在线播放器代码大全
    关于嵌入式系统方向
    老外搜集的Windows快捷键大全(2007110更新)
  • 原文地址:https://www.cnblogs.com/leeeee/p/7276180.html
Copyright © 2020-2023  润新知